我想让随机生成一个各位都不同的四位数,做猜数字游戏用,可是运行老是出现死循环,请高手们帮我检查检查,谢谢了
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;
}

解决方案 »

  1.   

    while(judge==false){}块里没有改变过jbdge的值,而一开始judge就为false,故在此循环中运转
      

  2.   

    while(soNum <1000)这个条件让它死循环了 if(judge1==true) 
    judge=true;这个只是结束了while(judge==false)对这个的循环 而你这个里面你又soNum=(int)(Math.random()*10000); 
    这样就死循环了
      

  3.   

    while(soNum <1000) 
    soNum=(int)(Math.random()*10000); 
    这只是一个循环,和下面没关系,不过从楼上的说法我又发现了另一个错误,呵呵,这样即使下面不是死循环也有可能打出三位数或两位数来
      

  4.   

    while(soNum <1000) 
    soNum=(int)(Math.random()*10000); 
    这只是一个循环,和下面没关系,不过从楼上的说法我又发现了另一个错误,呵呵,这样即使下面不是死循环也有可能打出三位数或两位数来
      

  5.   

    你的这个程序真的很难去读啊,呵呵,你这个程序跳出的条件是rubish[j] == rubish[i],所以只要四个数字不相同就会死循环,因此并不是一用就是死循环,只是偶尔会,你把这个里面的judge1 = false;,去掉就不会死循环了,但是和题目不符合了,想想吧!
      

  6.   

    while(judge==false) 循环下应该加上 judge1 = true;  
      

  7.   

    啊,我在前面写judge1 = true; 不行吗?我试试看
      

  8.   

    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的值变为了false。最后的if语句试图改变judge的值,这时永远都不会执行了,judge始终是false,也就是始终执行while循环了。应该在while循环的开始加上judge1的初始化语句,即judge1 = true;~~~
      

  9.   

    把缩进调整一下(ctrl-shift-F),就一清二楚了