2017-02-15 13 views
-1

Я огляделся и не могу найти ответ о том, в чем проблема. Он выполняет штраф до цикла, а затем, кажется, игнорирует цикл и получает зависание, поэтому я довольно смущен.Подумайте, что не так с моим кодом; он зацикливается на while, если цикл

package classGame; 
import java.util.*; 

public class GameTwo { 
    static int randomNumber; 
    static int numOfGuess = 5; 
    static Scanner GameTwo = new Scanner(System.in); 

    public static void main(String[] args) { 
     System.out.println("Frank: Hello there! My name is Frank. This is the introduction to the game."); 
     System.out.print("Frank: Please tell me what you would like to be called: "); 

     if(GameTwo.hasNextLine()) { 

      String userName =GameTwo.nextLine(); 
      System.out.println(userName + ": My name is: " + userName); 
      System.out.println("Frank: Well " + userName + ", it's nice to meet you. "); 
      System.out.println("Frank: Lets play a little game, I want you to guess a number, It's already" + 
     " in my head and it's between 1-10."); 

      int guessResult = 1; 
      int randomGuess = 0; 
      while(guessResult != -1) { 
      randomGuess = GameTwo.nextInt(); 
      guessResult = checkGuess(randomGuess); 
      }   
      while (randomGuess != guessResult) { 
      System.out.println(userName + ":Is the number: "); 
      randomGuess = GameTwo.nextInt(); 

      if(randomGuess < 1 || randomGuess > 10 || randomGuess > guessResult || randomGuess < guessResult) { 
       System.out.println("Frank: Thats not right "+ userName); 
      } else if (randomGuess == guessResult) { 
       System.out.println("Frank: Hey...Thats pretty good...You got it!"); 
      } 
      } 
     } 
    } 
    public static int getRandomNum() { 
     randomNumber = (int) (Math.random()*10); 
     return randomNumber; 
    } 

    public static int checkGuess(int guess) { 
     if(guess == randomNumber) { 
      return -1; 
     } else { 
      return guess; 
     } 
    } 
} 

вот что он печатает до петли

Frank: Привет! Меня зовут Фрэнк. Это введение в игру.

Frank: Скажите, пожалуйста, что вы хотели бы назвать: T

T: Меня зовут: T

Frank: Ну T, приятно встретиться с вами.

Фрэнк: Давайте сыграем в маленькую игру, я хочу, чтобы вы угадали число, Это уже в моей голове, и это между 1-10.

+2

Если вы не меняете тестовую переменную, здесь 'win', * внутри * самого цикла while, как эта переменная изменится? Как же тогда цикл while выйдет? –

+0

Прочтите раздел [while loop tutorial] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html) в разделе Основные учебные пособия по Java. –

+0

Подождите; nevermind Я понял, что был глупым, и я могу использовать свои исходные переменные, поэтому я изменил его на randomGuess! = guessResult и оставил последнюю часть как randomGuess == guessResult, но моя первоначальная проблема не устранена, программа не регистрирует цикл вообще. Я полностью удалил переменную win. –

ответ

0

Я думаю, что это проблема с тем, как работает Scanner.nextInt(). nextInt() принимает следующее целое число, но не очищает буфер, как nextLine().

Смотрите эту ссылку для получения дополнительной информации об этой проблеме: How does input.nextInt() work exactly?

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

while(guessResult != -1) { 

    randomGuess = GameTwo.nextInt(); 
    guessResult = checkGuess(randomGuess); 
    GameTwo.nextLine(); 
    System.out.println("Random Guess: " + randomGuess); //Try here 

} 

Я думаю, что причина, по которой петля становится повесила, потому что nextInt () продолжает находить номер randomGuess, все еще находящийся во входном буфере, и выполняется снова и снова. Чтобы проверить это, просто поставьте System.out.println("Random Guess: " + randomGuess); в цикле и посмотрите, будет ли он печатать с тем же номером снова и снова.

В противном случае мне нужно будет увидеть выходные данные вашей программы для дальнейшей диагностики проблемы.

Редактировать: Можете ли вы разместить ввод/вывод своей программы до того, как она сработает? Это поможет. Кроме того, у вас есть System.out.println() в вашем цикле, начиная с while (guessResult! = -1) или второго?

Редактировать 2: Я проверил этот код с моими изменениями и, похоже, работает как предполагалось (ish). Начальный цикл while не выполняет то, что предполагается. «Игровой» аспект угадывания правильного числа все происходит в первом цикле. Я «играю» в игру и угадываю цифры, но как только я получу ее правильно, она переместится во второй цикл, предположительно там, где вы действительно хотели «играть». Правильное число получено в первом цикле, а затем переменная guessResult получает значение -1. Затем, когда пользователь пытается угадать, где они должны, «правильное» число теперь равно -1.

Я не думаю, что игра была когда-либо «повесила трубку», она просто молча ожидала вашего ввода в первом цикле. Чтобы решить эту проблему:

Просто удалите первый цикл while (и его содержимое), и игра работает по назначению.

+0

Ничего; и System.out.printlns, которые у меня есть, уже не распечатываются. –

+0

Только что отредактировал главный пост; и он зависает с тем, что я изначально имел, и с вашими изменениями. –

+0

Я понимаю, что вы имеете в виду, я удалил первый цикл while и оставил часть if, else if, а затем набрал случайные числа, и в итоге я ударил по правильному, и весь цикл пошел через ... ты сказал, что это не для тебя для тебя? –