創建一個獲取用戶輸入的Java程序,它必須是類型'字節',並且在區間[0,8]中。 我正在使用一種方法來首先檢查輸入是否是一個字節,然後如果這真的檢查該字節是否適合間隔,然後將該值返回給我的主要方法。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
我打電話給它兩次,第一次打印輸入給出告訴用戶它不是一個字節,第二次告訴程序期待另一個輸入。據我現在瞭解,它可以完成只是第一個,它工作得很好 –