我读过的用户输入必须只是int类型,当用户输入字母而不是int时会出现问题。我知道如何处理异常,但我想将扫描器读回到用户犯了错误的位置。我能怎么做? 我已经尝试过无限循环,但它不起作用。
try{
System.out.print("enter number: ");
value = scanner.nextInt();
}catch(InputMismatchException e){
System.err.println("enter a number!");
}
答案 0 :(得分:2)
循环是正确的想法。你只需要标记成功并继续:
boolean inputOK = false;
while (!inputOK) {
try{
System.out.print("enter number: ");
numAb = tastiera.nextInt();
// we only reach this line if an exception was NOT thrown
inputOK = true;
} catch(InputMismatchException e) {
// If tastiera.nextInt() throws an exception, we need to clean the buffer
tastiera.nextLine();
}
}
答案 1 :(得分:2)
虽然其他答案给出了使用循环的正确想法,但您应避免将异常用作基本逻辑的一部分。相反,您可以使用hasNextInt
中的Scanner
来检查用户是否传递了整数。
System.out.print("enter number: ");
while (!scanner.hasNextInt()) {
scanner.nextLine();// consume incorrect values from entire line
//or
//tastiera.next(); //consume only one invalid token
System.out.print("enter number!: ");
}
// here we are sure that user passed integer
int value = scanner.nextInt();