2013-04-02 2 views
1

Я делаю программу для задания, где я должен позволить пользователю угадать 3 номера блокировки, чтобы разблокировать ее. Если они не могут сделать это в течение 3 догадок, игра заканчивается. Достаточно просто, и насколько я могу судить, я делаю все правильно, поэтому не знаю, где я ошибаюсь. Вот фрагмент кода:Guessing Loop Stuck Java

do{ 
    try{ 
     String g1Str = JOptionPane.showInputDialog("Enter number 1:"); 
     g1 = Integer.parseInt(g1Str); 
     looper = 2; 
    } 
    catch(NumberFormatException e){ 
     JOptionPane.showMessageDialog(null,"Not a Number"); 
     looper = 1; 
    } 
    if(g1!=num1){ 
     JOptionPane.showMessageDialog(null, "Incorrect guess, try again"); 
     lives = lives - 1; 
     looper = 1; 
    } 
    else if(g1==num1){ 
     JOptionPane.showMessageDialog(null, "Correct!"); 
     looper = 2; 
    } 
}while(looper==1||lives!=0); 

Вот мое мышление: Попросите пользователя ввести номер, попытка преобразовать строку в целое число. Я использую try catch, чтобы пользователь действительно вводил число, а не письмо. После этого я вижу, соответствует ли предположение реальному числу. Если это не так, вы теряете жизнь (жизнь была объявлена ​​как 3 ранее), а затем установите looper на 1, чтобы вы могли попытаться снова угадать, если у вас достаточно жизни. Если его право, петлитель установлен на 2, и цикл прерывается, и в этот момент пользователь может угадать второе число. Я хочу, чтобы цикл оставался активным, если у вас достаточно жизней, поэтому я устанавливаю оператор while в том случае, когда looper равен 1, OR, когда жизни не равны 0. Но, похоже, он не разбивает цикл, если жизнь идти вниз до 0. заранее спасибо

ответ

7

вы должны изменить логику вашего времени цикла:

while (looper == 1 && lives != 0)

Прямо сейчас, если у вас есть больше жизней, он будет держать зацикливание, нет вопрос, что такое петлитель.

+1

@ DoanCuong Почему это лучшее решение? – Pete

+0

Извините, мой плохой, я не сделал это через –

+0

Итак, я вижу, что случилось сейчас, я был в предположении, что ИЛИ означает, что если кто-то из них ошибается, он сломается. Исправлено, и я добавил 'if (lives == 0) {looper = 2}' в начале других циклов. благодаря – Dave555

0

Replace это

if(g1!=num1){ 
     JOptionPane.showMessageDialog(null, "Incorrect guess, try again"); 
     lives = lives - 1; 
     looper = 1; 
    } 

К этому

if(g1!=num1){ 
    JOptionPane.showMessageDialog(null, "Incorrect guess, try again"); 
    lives = lives - 1; 
    if(lives == 0) 
    { 
     looper = 2; 
    } 
    else 
    { 
     looper = 1; 
    } 

} 

Потому что, когда ваш lives достигают 0. looper по-прежнему равна 1, так что цикл по-прежнему

1

Вы хотите Логическое И &&, а не ИЛИ ||, например:

while(looper==1 && lives!=0); 

|| вычисляет true если либо один из его аргументов является правдой, так что вы должны продолжать идти, если looper является 1, независимо от того, что lives есть. Аналогично, ваш код будет продолжать цикл, если lives не 0, даже если вы установили looper в 2.

&& оценит, чтобы true только если оба условия являются истинными, и даст false и выйти из цикла, если либо looper не 1 или lives является 0.