[英]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.