Swift - 随机数(最小 - 最大)避免重复
Swift - random number (min - max) avoiding repetition
我有一个函数可以在两个给定值之间生成一个整数随机数。我的应用程序中的这个函数只会被调用两次,但是我想避免它生成两个相同的数字或两个彼此相邻的数字。我怎样才能修复下面的功能来实现它?
示例结果:
1, 1 = wrong
1, 2 = wrong
8, 7 = wrong
8, 12 = correct
1, 3 = correct
3, 0 = correct
函数:
func randomNumber(minX:UInt32, maxX:UInt32) -> Int {
let result = (arc4random() % (maxX - minX + 1)) + minX
return Int(result)
}
编辑:
怎么可能是重复的???
我不是要打乱数组,而是想从两个给定的数字
生成一个 Int
创建 global/static 变量,您将在其中记住最后一个有效生成的数字。然后添加 if 语句,当您生成与该变量相同(/彼此相邻)的数字时,它将递归调用 randomNumber。如果没有生成任何数字,则设置数字超出间隔。
你说的是"I want to avoid ... two numbers next to each other"所以我不明白8 ,7
是错的但是8, 9
是对的。
总之,我的回答答案是基于你的例子。只需发送之前的值并循环直到得到满意的答案:
func randomNumber(minX:UInt32, maxX:UInt32, previousNumber: Int? = nil) -> Int {
var result: Int
repeat {
result = Int((arc4random() % (maxX - minX + 1)) + minX)
} while previousNumber == result || previousNumber == result + 1
return result
}
let r1 = randomNumber(1, maxX: 3)
let r2 = randomNumber(1, maxX: 3, previousNumber: r1)
当没有满足你条件的数字时,这将导致死循环,例如:
randonNumber(1, maxX: 2, previousNumber: 2)
您应该通过数学计算可能性来添加一个 guard
语句,并创建一个计数器,以便 repeat
循环在 100 次迭代之后结束。
我有一个函数可以在两个给定值之间生成一个整数随机数。我的应用程序中的这个函数只会被调用两次,但是我想避免它生成两个相同的数字或两个彼此相邻的数字。我怎样才能修复下面的功能来实现它?
示例结果:
1, 1 = wrong
1, 2 = wrong
8, 7 = wrong
8, 12 = correct
1, 3 = correct
3, 0 = correct
函数:
func randomNumber(minX:UInt32, maxX:UInt32) -> Int {
let result = (arc4random() % (maxX - minX + 1)) + minX
return Int(result)
}
编辑: 怎么可能是重复的??? 我不是要打乱数组,而是想从两个给定的数字
生成一个Int
创建 global/static 变量,您将在其中记住最后一个有效生成的数字。然后添加 if 语句,当您生成与该变量相同(/彼此相邻)的数字时,它将递归调用 randomNumber。如果没有生成任何数字,则设置数字超出间隔。
你说的是"I want to avoid ... two numbers next to each other"所以我不明白8 ,7
是错的但是8, 9
是对的。
总之,我的回答答案是基于你的例子。只需发送之前的值并循环直到得到满意的答案:
func randomNumber(minX:UInt32, maxX:UInt32, previousNumber: Int? = nil) -> Int {
var result: Int
repeat {
result = Int((arc4random() % (maxX - minX + 1)) + minX)
} while previousNumber == result || previousNumber == result + 1
return result
}
let r1 = randomNumber(1, maxX: 3)
let r2 = randomNumber(1, maxX: 3, previousNumber: r1)
当没有满足你条件的数字时,这将导致死循环,例如:
randonNumber(1, maxX: 2, previousNumber: 2)
您应该通过数学计算可能性来添加一个 guard
语句,并创建一个计数器,以便 repeat
循环在 100 次迭代之后结束。