繁体   English   中英

做...在Java中循环

[英]Do… while loop in Java

谁能告诉我这里出了什么问题? 我陷入了无限循环。

do{
    System.out.print("cards["+pickRandom+"] is:"+cards[pickRandom]);
    pickRandom = (int)(Math.random() * 52);  //pick a new random card
    System.out.print(" so now cards["+pickRandom+"] is:"+cards[pickRandom]);
    if (cards[pickRandom] != 0) {  //if it's not 0, then assign it
        System.out.print("cards["+pickRandom+"] is not 0: "+cards[pickRandom]);
        shuffled[k]=cards[pickRandom];
        System.out.print(" shuffled["+k+"]:"+shuffled[k]);
        cards[pickRandom]=0;
        //System.out.println("For card "+k+ ": "+ shuffled[k] +" was found on pick number "+count);
    } 
    else{System.out.println("cards["+ pickRandom+ " was:" +cards[pickRandom]);}
}while (cards[pickRandom]==0);

我正在尝试选择一张非== 0的随机卡片。 如果它是== 0,我希望循环选择另一张卡

你的if块可以保证将任何cards[pickRandom]更改为0.这样做意味着你的while条件总是正确的。

所以从本质上讲,这是你的代码逻辑:

int x = 1;
do { 
   x = // some random value
   if (x != 0) {
      x = 0;
   }
while (x == 0);

解决方案:不要这样做。 使用其他方式结束循环。 有关更详细的帮助,请更详细地解释您的代码及其目标。


解决问题的可能方法:在while循环后将数组值设置为零:

  do {
     pickRandom = (int) (Math.random() * 52);
     if (cards[pickRandom] != 0) {
        shuffled[k] = cards[pickRandom];

        //  cards[pickRandom] = 0; // *** don't do this here ***

     } else {
        // not sure what you want here
     }
  } while (cards[pickRandom] != 0);

  cards[pickRandom] = 0;  // **** do it here! ****

原因是,在那时,你会知道已经选择了正确的卡。 但有一个问题 - 考虑测试以确保卡中的所有值都不为0。

更好的解决方案:使用一个整数的ArrayList,用Collections.shuffle()它们进行随机播放,然后只要size()> 0,就可以每次从循环中删除第0个项目。

你在每种情况下将你的cards[pickRandom]设置为0

cards[cards[pickRandom]=0;  

然后你在循环中检查条件 -

while (cards[pickRandom]==0);

所以在while循环中的条件总是被评估为true ,这就是为什么循环永远不会停止的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM