У меня здесь следующий код:
import java.util.Random;
public class Main {
public static void main(String[] args) {
int numnovo, numeros[], j;
boolean igual;
numeros = new int[6];
Random rand = new Random();
numnovo = rand.nextInt(60)+1;
numeros[0] = numnovo;
System.out.println("Número 1: " + numeros[0]);
for(int i = 1; i < 6; i++)
{
do
{
igual = true;
numnovo = rand.nextInt(60)+1;
j=0;
while(j<=i && igual)
{
igual = (numnovo == numeros[j++]);
}
}while(igual);
numeros[i] = numnovo;
System.out.println("Número " + (i+1) + ": " + numeros[i]);
}
}
}
Итак, вот один из результатов, которые я получил от него:
numeros[0]=48
numeros[1]=31
numeros[2]=52
numeros[3]=25 - repeated
numeros[4]=18
numeros[5]=25 - repeated
Тем не менее, при анализе кода я предполагаю, что в цикле возникнет следующая ситуация:
i=5
j=0 numeros[0]=48 false
j=1 numeros[1]=31 false
j=2 numeros[2]=52 false
**j=3 numeros[3]=25 true**
В частности, в отмеченной строке я бы предположил, что условие цикла while (j <= i && igual) будет выполнено и, следовательно, оно выйдет из цикла и сгенерирует новое число, но это не случилось, он прошел прямо и считал это действительным значением. </p>
Я уже целый день ломаю голову над этой проблемой и уже не могу найти решение, и это происходит примерно в 10% случаев, поэтому это не было изолированным случай.
Я попытался посмотреть на соотношение «j vs i», как в «Всегда ли повторяющееся число близко к предыдущему», но в некоторых исполнениях повторяющееся число будет обозначено цифрами [0] и цифрами [5], и в других это может быть как цифры [0] и цифры [1], поэтому тезис не работает.
Я также пытался изменить условие с && на ||, но получил его даже немного.
Я пробовал также несколько различных синтаксисов условий, например, идти в противоположном направлении (используя ложные выражения вместо истины), а также разные циклы вместо Do-While, но все равно не повезло.
Итак ... какая помощь здесь?