Создание java-программы, которая получает вход от пользователя, должна быть типа «byte» и в интервале [0,8]. Я использую метод, чтобы сначала проверить, является ли вход байтом, а затем, если true, проверьте, соответствует ли байт в интервале и затем возвращает это значение моему основному методу.Java - сканер, стоящий без дела
public static byte GetShiftedLeft(){
byte l = GetByte(SHIFT_L_MSG);
while (l < 0 || l > 8){
System.out.println(l + " is not between the range");
l = GetByte(SHIFT_L_MSG);
}
return l;
}
public static byte GetShiftedRight(){
byte r = GetByte(SHIFT_R_MSG);
while (r < 0 || r > 8){
System.out.println(r + " is not between the range");
r = GetByte(SHIFT_R_MSG);
}
return r;
}
public static byte GetByte(String prompt){
System.out.print(prompt);
Scanner stdin = new Scanner(System.in);
while (!stdin.hasNextByte()){
System.out.println("*** "+stdin.next() + " is not a byte ***");
System.out.print("Try again\n"+prompt);
stdin.next();
}
return stdin.nextByte();
}
Когда я запускаю программу, чтобы проверить это, если первый вход не байт, а затем на следующий входной байт, но не подходит в интервале, сообщение не отображается и сканер бездействует.
Выходной пробег:
enter #left-shift bits in the interval [0,8]: 145
*** 145 is not a byte ***
Try again
enter #left-shift bits in the interval [0,8]: 12
4
enter #right-shift bits in the interval [0,8]: 12
12 is not between the range
enter #right-shift bits in the interval [0,8]: 11
11 is not between the range
enter #right-shift bits in the interval [0,8]: 10
10 is not between the range
enter #right-shift bits in the interval [0,8]: 789
*** 789 is not a byte ***
Try again
enter #right-shift bits in the interval [0,8]: 12
Тогда просто стоит ... как линии 5 & 6 с выхода
Почему вы называете 'stdin.next()' дважды? – shmosel
Я звонил дважды, в первый раз, чтобы напечатать вход, указав, что пользователь не был байтом, а второй - сказать, что программа ожидает другого ввода. Как я понимаю, теперь это можно сделать только с первым, и он отлично работает –