Итак, я пишу программу, в которой кто-то рисует карты из колоды. Поэтому я написал цикл while, который проходит цикл и проверяет, есть ли более 4 случайно созданных карт, и если есть, измените карту.java while loop not break out
вот мой код:
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;
Теперь это работает, но когда я положил его внутри для цикла и установите его, чтобы работать как в 40 раз, примерно 2/3 времени он создает бесконечный цикл.
Я обнаружил, что бесконечный цикл создается только в том случае, если утверждение if(in == 4)
1 является истинным.
Почему это? С прошлой ночи я отлаживался, и я не могу понять это.
Более чистый способ написания оператора 'if-else':' check = isIn; ' – Bucket
Поскольку вы устанавливаете' isIn' в 'true' в этом блоке, что означает, что' проверка' никогда не будет установлена в 'false' , – GriffeyDog
Также комментарий к '(int) Math.ceil (Math.random() * 13) +" "'. Я подозреваю, что ваша причина для '' '' заключается в том, чтобы преобразовать int в String, но вы можете делать только '+" ", что делает код более простым впоследствии. –