Цикл while в игре на угадывание чисел

Мне нужно написать код, который просит вас угадать число от 1 до 10 и использует цикл. Он должен использовать метод System.in.read() для ввода данных пользователем. Правильное число 7, и когда вы угадаете, что оно заканчивается. Если вы угадаете неправильно, он предложит вам попробовать еще раз. Я не знаю, почему мой код работает неправильно, поэтому мне нужна помощь. Вывод, который я получаю, странный, независимо от того, какой номер я ввожу, он просто говорит:

  • Привет! Введите число от 1 до 10:
  • (введен номер упр. 4)
  • Ваша догадка слишком высока
  • Привет! Введите число от 1 до 10:
  • Ваша догадка слишком высока
  • Привет! Введите число от 1 до 10:

Я новичок в программировании, поэтому извините, если это неправильный отступ или решение очевидно.

public static void main(String[] args) throws java.io.IOException {
    int input;
    boolean play = true;
    while (play == true) {
        System.out.println("Hello! Enter a number between 1 and 10: ");
        input = System.in.read();
        if (input > 7) {
            System.out.println("Your guess is too high");
        } else if (input < 7) {
            System.out.println("Your guess is too low");
        } else if (input == 7) {
            System.out.println("Correct! the correct number was: 7"); 
        }
    }
}

Это должно дать вам конкретный результат в зависимости от числа, например, если оно слишком высокое или слишком низкое, вы можете попробовать еще раз и ввести новое число, пока не получите правильный ответ 7. Если число не 1-10, вы можете должно получить сообщение об ошибке. Спасибо.

ваше решение довольно хорошее, но вы забыли остановить цикл while, для чего вы используете флаг play. Так что просто назначьте play = false, когда найдете input == 7.

prayagupa 07.04.2019 19:22

Я изменил код, чтобы добавить play = false после того, как вы получите правильный ответ, но по какой-то причине независимо от того, какое число я ввожу, оно все равно дважды печатает строку «Ваше число слишком велико».

Brugger 07.04.2019 19:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
122
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не меняете переменную play, поэтому выход из цикла while невозможен. Вы должны были бы изменить это следующим образом:

else if (input == 7) {
    System.out.println("Correct! the correct number was: 7"); 
    play = false;
}

Также вы можете переместить эту строку: System.out.println("Hello! Enter a number between 1 and 10: "); перед while циклом.

Ответ принят как подходящий

Это может решить вашу проблему.

public static void main(String[] args) {

    int input;
    boolean play = true;
    Scanner inputNumber = new Scanner(System.in);
    while (play) {
        System.out.println("Hello! Enter a number between 1 and 10: ");
        input = inputNumber.nextInt();
        if (input > 7) {
            System.out.println("Your guess is too high");
        } else if (input < 7) {
            System.out.println("Your guess is too low");
        } else if (input == 7) {
            System.out.println("Correct! the correct number was: 7");
            play = false;
        }
    }
}

Использование сканера вместо System.in.read() сработало, но мне интересно, есть ли способ заставить его работать с методом System.in.read() вместо/почему он не работал. Любая подсказка?

Brugger 07.04.2019 19:49

Потому что System.in.read() читает байт и возвращает целое число, которое является десятичным значением ASCII. Как вы можете видеть, если вы введете 5, он вернет 53. Таким образом, в основном ваш ввод использует десятичное значение ASCII, которое всегда больше 7 (число начинается с 0, а десятичное значение 0 равно 48 в ASCII). Вот почему вы получаете «Ваше предположение слишком велико» в качестве вывода. Вы можете использовать input = ((char) input - '0'); ниже строки ввода. Это изменит ваше десятичное значение ASCII на значение char (это число, которое вы вводите), а затем преобразует его в целое число.

ray1195 07.04.2019 20:28

Вы также можете обратиться к этой ссылке для получения дополнительных разъяснений stackoverflow.com/questions/15446689/…

ray1195 07.04.2019 20:31

Другие вопросы по теме