だから私は誰かがデッキからカードを引くプログラムを書いています。そこで、ランダムに作成されたカードが 4 枚以上引かれているかどうかをループしてチェックし、ある場合はカードを変更する while ループを作成しました。
ここに私のコードがあります:
String card = (int)Math.ceil(Math.random() * 13) + " ";
String[] used2 = used.split(" ");
//used is a String like "12 3 7 8 4 ... # etc" such that it is all the previously drawn cards.
boolean checking = true;
boolean isIn = false;
int in = 0;
int check = 0;
while(checking){
for(int q = 0; q < used2.length; q++){
check += 1;
if(card.equals(used2[q] + " ")){
in += 1;
if(in == 4){
System.out.println(check); //debugging line
check += 1;
card = (int)Math.ceil(Math.random() * 13) + " ";
card_val = (int)Math.ceil(Math.random() * 13);
isIn = true;
in = 0;
break;
}
}
}
if(isIn){
//will execute if there is 4 of the cards already drawn so the while loop continues with a different card
checking = true;
}
else{
//breaks out of while loop because the card can be drawn
checking = false;
}
}
used += card;
これで実行されますが、for ループ内に配置して 40 回実行するように設定すると、約 2/3 回で無限ループが作成されます。
if(in == 4)
ステートメントが真であることが判明した場合にのみ、無限ループが作成されることを発見しました。
どうしてこれなの?昨夜からデバッグを行っていますが、これを理解できません。