[英]How to handle String inputs with nextInt (Java scanner)
我的代碼如下:
Scanner scan = new Scanner(System.in);
boolean valid_input = false;
while (valid_input == false) {
try {
int num_input = scan.nextInt();
if ((num_input >= 5) && (num_input <= 10)){
valid_input = true;
no_of_letters = num_input;
}
} catch (java.util.InputMismatchException e) {}
if (valid_input == false){
System.out.println("Invalid Input");
System.out.println("Please enter a number between 5 and 10");
}
}
scan.close();
當它接受一個數字時,它會按我的預期執行,每次輸入一個時都會檢查輸入,直到它在可接受的范圍內得到一個。
但是當輸入一個不是整數的字符時,它會停止等待輸入並一遍又一遍地打印錯誤消息。
這是正在發生的事情:
scan.nextInt();
並輸入字母c
c
,因為它不是int
,所以它保留在其輸入管道的前面。 它沒有超過 char c
,而是拋出一個異常,打印出您提供的文本while
循環,因為valid_input
尚未變為true
。 然后,當掃描儀嘗試讀取其管道中的下一個輸入時, c
仍然存在......參見上面的步驟“2”......無限循環。那么你需要做什么?
見上面@PM 77-1 的評論
使用 nextLine() (而不是 nextInt()) 后跟 parseInt();
所以這可能是這樣的:
import java.util.Scanner;
public class ScannerQ {
public static void main(String[] args)
{
int no_of_letters = 0;
Scanner scan = new Scanner(System.in);
boolean valid_input = false;
while (valid_input == false) {
try {
String next = scan.nextLine();
int num_input = Integer.parseInt(next);
if ((num_input >= 5) && (num_input <= 10)){
valid_input = true;
no_of_letters = num_input;
}
} catch (NumberFormatException e) { //note that this is the type of exception thrown by parseInt()
System.out.println("Invalid Input - the input needs to be a number");
continue;
}
if (valid_input == false){
System.out.println("Invalid Input");
System.out.println("Please enter a number between 5 and 10");
}
}
scan.close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.