2014-10-16 2 views
1

Цель состоит в том, чтобы предложить пользователю угадать число от 1 до 10, генерирует случайное число от 1 до 10.Хотя цикл - казалось бы, не обращая внимания, если заявления

Если пользователь ввел неправильный номер сказать им, что они «Слишком высокий» или «Слишком низкий», и пусть они снова попытаются.

Следите за тем, сколько догадок пользователь делает.

Когда пользователь угадывает случайное число, сообщите им, сколько угадок они сделали.

Вот что у меня есть. Когда я ввожу число, он возвращает правильную инструкцию if в цикле while. Любой вход после этого возвращает тот же оператор if, даже если это неверно.

Неужели я не ошибаюсь? Что я делаю не так? Извините, я новичок в цикле.

public static void main(String[] args) { 

     System.out.println("Guess a number from 1 to 10."); 

    Scanner userInput = new Scanner(System.in); 

    int userNumber = userInput.nextInt(); 

    int rand = (int) (Math.random()*10) + 1; 

    int numOfGuesses = 0; 

    while (userNumber != rand) { 

     if (userNumber > rand) {  
      System.out.println("Too high, guess again."); 
      numOfGuesses++; 

     } if (userNumber < rand) { 
       System.out.print("Too low, guess again."); 
       numOfGuesses++; 
     } 

     userInput.nextInt(); 
    } 

    if (userNumber == rand) { 
     System.out.println("That's the correct number!"); 
     numOfGuesses++; 
     System.out.println("You made " + numOfGuesses + " guesses."); 
     } 
    } 
} 
+0

Для обоих < and > вы делаете то же самое: numOfGuesses ++; –

+0

Шаг с отладчиком. Проверьте переменные/значения. – user2864740

+0

@sureshatta Был ли я помещен numOfGuesses ++; в конце цикла while до userInput.nextInt() ;? Я не вижу, как это влияет на if-запросы, которые игнорируются. –

ответ

4

Вы никогда не обновляете значение userNumber. Заменить строку userInput.nextInt(); с userNumber=userInput.nextInt();

4

Изменения этого (в конце вашего цикла)

userInput.nextInt(); 

к

userNumber = userInput.nextInt(); 

Поскольку вы не храните ввод пользователя цикл просто работает навсегда (и ваши тесты появятся для пропуска).

4
userNumber = userInput.nextInt(); 

вместо

userInput.nextInt(); 
4

Вы забыли назначить следующий INT в переменную:

while (userNumber != rand) { 

    if (userNumber > rand) {  
     System.out.println("Too high, guess again."); 
     numOfGuesses++; 

    } if (userNumber < rand) { 
      System.out.print("Too low, guess again."); 
      numOfGuesses++; 
    } 

    userNumber = userInput.nextInt(); // <-- here 
} 
2

Вот полный рабочий код.

Обратите внимание, что сканер должен быть закрыт с использованием метода try finally, если вы используете Java 1.6, если используете 1.7, вы можете сделать это, используя интерфейс autoclose ie. попробуйте (сканер userInput = новый сканер (System.in)) {и опустить окончательно все вместе.

public static void main(String[] args) { 

    Scanner userInput = null; 

    try { 

     System.out.println("Guess a number from 1 to 10."); 

     userInput = new Scanner(System.in); 

     int userNumber = userInput.nextInt(); 
     int rand = (int) (Math.random()*10) + 1; 
     int numOfGuesses = 0; 

     while (userNumber != rand) { 

      if (userNumber > rand) {  
       System.out.println("Too high, guess again."); 
       numOfGuesses++; 

      } else { 
       System.out.println("Too low, guess again."); 
       numOfGuesses++; 
      } 

      userNumber = userInput.nextInt(); 
     } 

     if (userNumber == rand) { 
      System.out.println("That's the correct number!"); 
      numOfGuesses++; 
      System.out.println("You made " + numOfGuesses + " guesses."); 
     } 
    } 
    finally { 
     if (userInput != null) { 
      userInput.close(); 
     } 
    } 
} 
+0

+1 для обозначения того, что сканер должен быть закрыт. – Seelenvirtuose

+0

Я буду помнить об этом, это для класса java 1, я уверен, что инструктор просто делает его менее сложным. Приятно знать, что я почти все это начинал с самого начала! –

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