2014-11-12 4 views
1

Я пытаюсь сделать очень обычную игру, где вы угадываете число между 1-1000, используя цикл do. Все работает, за исключением случаев, когда я, наконец, сделаю правильную догадку, мне все же предлагается сделать еще одно предположение, и когда я снова введу то же правильное предположение, программа прекратится, как и предполагалось.Java-помощь в отношении цикла (do loops)

Зачем мне это делать, чтобы, наконец, заставить мою программу работать? Я зацикливаюсь в дополнительное время? Кроме того, если я сделаю правильную догадку (компилятор скажет, что я прав, но все равно подсказать мне), то неправильная догадка (компилятор скажет мне, что я ошибаюсь), то правильное предположение снова, программа будет завершаться только после Я делаю правильное предположение во второй раз.

Второй цикл цикла внизу - это то, что я поставил в своем основном методе. Все выше в методе, который я написал, называется play.

public static boolean play() 
{ 

    boolean c; 
    int n = 0; 

    do { 
     String input = JOptionPane.showInputDialog("Enter a number between 1-1000"); 
     n = Integer.parseInt(input); 

     if (n == guess) 
     { 
      System.out.println("Correct"); 
      c = true; 
     } 
     else if (n < guess) 
     { 
      System.out.println("Not Right"); 
      c = false; 
     } 
     else 
     { 
      System.out.println("Not Right"); 
      c = false; 
     } 

     guess++; 

    } while (c == false); 

    return c; 

} 

В основной метод:

do { 
     game1.play(); 
    } while (game1.play() != true); 
+0

Где значение угадывания? –

+0

Когда вы вызываете 'game1.play()' в то время, он выполняется снова. Привяжите значение к переменной, как в предыдущем цикле do-while. –

ответ

2

Этот цикл выполняется метод воспроизведения дважды в каждой итерации цикла:

do { 
    game1.play(); // first call 
} while (game1.play()!=true); // second call 

Вы не тестируется значение, возвращаемое при первом вызове , так что даже если он вернет true, вы все равно вызовете game1.play(), который снова отобразит «Введите число от 1 до 1000».

Замените его:

boolean done = false; 
do { 
    done = game1.play(); 
} while (!done); 

Это только назвать play() один раз в каждой итерации цикла.

Тем не менее, я не уверен, зачем вам нужен внешний контур. Вы можете просто заменить его одним вызовом на game1.play(), так как game1.play() будет зацикливаться до тех пор, пока не будет введен правильный номер.

+0

+1 для такого информативного и полного ответа –

 Смежные вопросы

  • Нет связанных вопросов^_^