Вероятно, простая задача для вас, ребята, однако я действительно изо всех сил стараюсь, чтобы это сработало. Я создаю метод, который может возвращать случайные целые числа от 0-30. Но я хочу убедиться, что одни и те же цифры не используются дважды. Поэтому я создал массив с именем UsedNumbersArray, чтобы отслеживать все.
Моя идея состоит в том, что сначала он генерирует случайное число, затем проверяет массив один за другим, используя цикл for, чтобы увидеть, есть ли он там. Если это так, он должен заменить значение на ноль, убедившись, что оно не будет найдено снова.
Однако, что странно, так это то, что он заменяет в массиве совершенно другое число, чем случайное число. Проверьте мой код:
private static int checkIfNumberUsed(){
int questionNumber = randomNumberInRange(1,questionsWithAnswers[0].length); // create random number
boolean hasNotBeenUsed = false;
while (!hasNotBeenUsed){ // as long it HAS been used, it will continue to run the loop and create a random num till it gets what it wants
for (int i = 0; i < questionsWithAnswers[0].length ; i++) { // check if it has been used before
if (questionNumber==usedNumbersArray[i]){
usedNumbersArray[i]=0; // will replace the number with 0 so that it can't be found and used again
hasNotBeenUsed=true; // will exit the loop
}
}
questionNumber = randomNumberInRange(1,questionsWithAnswers[0].length); // if no matches are found it will generate a new random number
}
return questionNumber;
Вот вывод:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
8
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0, 19, 20, 21, 22, 23, 24, 25 , 26, 27, 28, 29, 30]
Как видите. Случайное число равно 8, но оно заменило 18 на 0 вместо 8, как предполагалось?
Надеюсь, вы сможете понять это. Заранее спасибо