我这里有以下代码:
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) 的条件得到满足,因此它会退出循环并生成一个新数字,但事实并非如此发生,它直接通过并认为它是一个有效值。
我已经围绕这个问题思考了一天左右,但找不到解决方案,大约 10% 的执行过程中都会发生这种情况,所以它不是孤立的案例。
我试图研究“j vs i”关系,如“重复的数字是否总是接近前一个”,但在某些执行中,重复的数字将是 numeros[0] 和 numeros[5],并且在其他情况下,它可能类似于 numeros[0] 和 numeros[1],因此该论文无效。
我也尝试将条件从 && 更改为 ||,但一点也没有改变。
我还尝试了一些不同的条件语法,如朝相反的方向(使用错误语句而不是 true),以及不同的循环而不是 Do-While,但仍然没有成功。
那么...这里有什么帮助吗?
最佳答案
您必须将 do-while 循环更改为
do
{
igual = false;
numnovo = rand.nextInt(60)+1;
j=0;
while(j<=i && !igual)
{
igual = (numnovo == numeros[j++]);
}
}while(igual);
您的代码仅在遇到第一个不相等的数字时才退出循环。相反,假设数字不相等,并在遇到重复数字时退出循环。
关于java - 生成 6 个不相等数字的循环失败 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56213768/