Как создать случайное число в Swift без повторения предыдущего случайного числа?

Я новичок в Swift и логике программирования вообще, так голый со мной

Как вы можете генерировать случайное число от 0 до 9 в Swift без повторения последнего сгенерированного числа? Поскольку в том же номере не будет появляться дважды подряд.

5 ответов

Сохраните предыдущий сгенерированный номер в переменной и сравните сгенерированный номер с предыдущим номером. Если они соответствуют генерации нового случайного числа. Повторите генерацию новых чисел, пока они не совпадут.

var previousNumber: ******? // used in randomNumber() 
func randomNumber() -> ****** {
 var randomNumber = arc4random_uniform(10)
 while previousNumber == randomNumber {
 randomNumber = arc4random_uniform(10)
 }
 previousNumber = randomNumber
 return randomNumber
}


мое решение, я думаю, его легко понять

var nums = [0,1,2,3,4,5,6,7,8,9]
while nums.count > 0 {
 // random key from array
 let arrayKey = Int(arc4random_uniform(******(nums.count)))
 // your random number
 let randNum = nums[arrayKey] 
 // make sure the number isnt repeated
 nums.removeAtIndex(arrayKey)
}


Вот хороший трюк, который можно выбрать одинаково из чисел, которые ранее не были выбраны.

У вас есть 10 номеров, но вы хотите выбрать только 9 номеров (от 0 до 9, но без предыдущего номера). Если вы уменьшите свой диапазон на 1, вы можете выбрать из 9 случайных чисел, а затем просто заменить повторное число на предыдущий верхний номер диапазона. Таким образом, вы должны генерировать только одно случайное число каждый раз, и вы получаете однородность:

var previousNumber = arc4random_uniform(10) // seed the previous number
func randomNumber() -> ****** {
 var randomNumber = arc4random_uniform(9) // generate 0...8
 if randomNumber == previousNumber {
 randomNumber = 9
 }
 previousNumber = randomNumber
 return randomNumber
}


Самый простой способ сделать это - повторить/пока:

let current = ...
var next: Int
repeat {
 next = Int(arc4random_uniform(9))
} while current == next
// Use `next`


Поместите все значения, которые вы хотите в массив, сгенерируйте случайное число с помощью arc4random_uniform (SIZEOFARRAY) и вытащите индекс случайного значения из массива, а затем повторите этот процесс до тех пор, пока массив не станет пустым.

licensed under cc by-sa 3.0 with attribution.