我想让随机生成一个各位都不同的四位数,做猜数字游戏用,可是运行老是出现死循环,请高手们帮我检查检查,谢谢了
int soNum=(int)(Math.random()*10000);
boolean judge1=true,judge=false;
while(soNum<1000)
soNum=(int)(Math.random()*10000);
while(judge==false)
{
int[] rubish=new int[4];
rubish[0]=soNum%10;
rubish[1]=soNum%100/10;
rubish[2]=soNum%1000/100;
rubish[3]=soNum/1000;
for(int i=0;i<3;i++)
{
for(int j=i+1;j<4;j++)
{
if(rubish[j]==rubish[i])
{
soNum=(int)(Math.random()*10000);
judge1=false;
}
}
}
if(judge1==true)
judge=true;
}
int soNum=(int)(Math.random()*10000);
boolean judge1=true,judge=false;
while(soNum<1000)
soNum=(int)(Math.random()*10000);
while(judge==false)
{
int[] rubish=new int[4];
rubish[0]=soNum%10;
rubish[1]=soNum%100/10;
rubish[2]=soNum%1000/100;
rubish[3]=soNum/1000;
for(int i=0;i<3;i++)
{
for(int j=i+1;j<4;j++)
{
if(rubish[j]==rubish[i])
{
soNum=(int)(Math.random()*10000);
judge1=false;
}
}
}
if(judge1==true)
judge=true;
}
judge=true;这个只是结束了while(judge==false)对这个的循环 而你这个里面你又soNum=(int)(Math.random()*10000);
这样就死循环了
soNum=(int)(Math.random()*10000);
这只是一个循环,和下面没关系,不过从楼上的说法我又发现了另一个错误,呵呵,这样即使下面不是死循环也有可能打出三位数或两位数来
soNum=(int)(Math.random()*10000);
这只是一个循环,和下面没关系,不过从楼上的说法我又发现了另一个错误,呵呵,这样即使下面不是死循环也有可能打出三位数或两位数来
{
for(int j=i+1;j <4;j++)
{
if(rubish[j]==rubish[i])
{
soNum=(int)(Math.random()*10000);
judge1=false;
}
}
} 当得到的四位数有重复的就会执行到上面if语句里面,这时judge1的值变为了false。最后的if语句试图改变judge的值,这时永远都不会执行了,judge始终是false,也就是始终执行while循环了。应该在while循环的开始加上judge1的初始化语句,即judge1 = true;~~~