Мне нужно написать код, который просит вас угадать число от 1 до 10 и использует цикл. Он должен использовать метод System.in.read() для ввода данных пользователем. Правильное число 7, и когда вы угадаете, что оно заканчивается. Если вы угадаете неправильно, он предложит вам попробовать еще раз. Я не знаю, почему мой код работает неправильно, поэтому мне нужна помощь. Вывод, который я получаю, странный, независимо от того, какой номер я ввожу, он просто говорит:
Я новичок в программировании, поэтому извините, если это неправильный отступ или решение очевидно.
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, вы можете должно получить сообщение об ошибке. Спасибо.
Я изменил код, чтобы добавить play = false после того, как вы получите правильный ответ, но по какой-то причине независимо от того, какое число я ввожу, оно все равно дважды печатает строку «Ваше число слишком велико».




Вы не меняете переменную 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() вместо/почему он не работал. Любая подсказка?
Потому что System.in.read() читает байт и возвращает целое число, которое является десятичным значением ASCII. Как вы можете видеть, если вы введете 5, он вернет 53. Таким образом, в основном ваш ввод использует десятичное значение ASCII, которое всегда больше 7 (число начинается с 0, а десятичное значение 0 равно 48 в ASCII). Вот почему вы получаете «Ваше предположение слишком велико» в качестве вывода. Вы можете использовать input = ((char) input - '0'); ниже строки ввода. Это изменит ваше десятичное значение ASCII на значение char (это число, которое вы вводите), а затем преобразует его в целое число.
Вы также можете обратиться к этой ссылке для получения дополнительных разъяснений stackoverflow.com/questions/15446689/…
ваше решение довольно хорошее, но вы забыли остановить цикл while, для чего вы используете флаг
play. Так что просто назначьтеplay = false, когда найдетеinput == 7.