Генерация случайного числа не в массиве в быстром - PullRequest
0 голосов
/ 14 января 2019

Я хочу сгенерировать случайное число, которого нет в массиве. Если это так, то он будет продолжать генерировать, пока не сгенерирует число, которого нет. Затем он добавит этот номер в массив.

После первого раза не работает. Первый раз всегда работает, так как массив пуст. Я думаю, что-то не так с моей петлей while.

Вот мой код:

var selectQuestion: UInt32 = 0
var questionsArray:[UInt32] = []
var questionNotAsked = false

if (questionsArray.isEmpty == true) {
    questionNotAsked = true
    selectQuestion = arc4random_uniform(10)
}

while(!questionNotAsked) {
    selectQuestion = arc4random_uniform(10) //0-9
    for questions in self.questionsArray {
        if selectQuestion == questions {
            self.questionNotAsked = false
            return
        } else {
            self.questionNotAsked = true
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Это как задание. Сделай это и исследуй это. Это очень полезный и веселый опыт.

Я просто следую тому, чего ты хочешь достичь. Есть более изящные способы реализовать это.

    var questionsArray:[UInt32] = []

    func nextRandom(){

    var selectQuestion: UInt32 = 0
    var questionNotAsked = false

    while(!questionNotAsked) {
        selectQuestion = arc4random_uniform(10) //0-9
        for questions in questionsArray {
            if selectQuestion == questions {
                questionNotAsked = true
                break;
            }
        }
        questionNotAsked = !questionNotAsked
        if questionNotAsked {
             questionsArray.append(selectQuestion)}
        }
    }

      nextRandom()
      nextRandom()
      nextRandom()
      nextRandom()
      nextRandom()
    nextRandom()
    nextRandom()
    nextRandom()
    nextRandom()
    nextRandom()

    print(questionsArray)
0 голосов
/ 14 января 2019

Если вы ищете только цифры от 0 до 9, заполните массив этими значениями и shuffle it. Затем переберите столько, сколько вам нужно. Если вы дошли до конца, перетасуйте и повторите.

...