下面的代码询问用户他/她想要多少赛车手。
while (true) { // loops forever until break
try { // checks code for exceptions
System.out.println("How many racers should" + " participate in the race?");
amountRacers = in.nextInt();
break; // if no exceptions breaks out of loop
}
catch (InputMismatchException e) { // if an exception appears prints message below
System.err.println("Please enter a number! " + e.getMessage());
continue; // continues to loop if exception is found
}
}
如果在amoutnRacers = in.nextInt();
输入一个数字,则代码会中断循环,其余程序运行正常;但是,当我输入诸如" awredsf"它应该捕捉到它的异常。而不是再次提示用户它不断循环,这对我来说没有意义。
程序在连续循环时打印如下:
有多少参赛者参加比赛? 有多少参赛者应参加比赛? 有多少参赛者应参加比赛? 有多少参赛者应参加比赛? 有多少参赛者应参加比赛? 有多少参赛者应参加比赛? 有多少赛车手参加比赛?请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 请输入一个号码!空值 ...
我不明白amountRacers = in.nextInt();
发生了什么,为什么用户无法输入号码?
答案 0 :(得分:7)
捕获InputMismatchException后,只需添加input.next()
即可。
catch (InputMismatchException e) { //if an exception appears prints message below
System.err.println("Please enter a number! " + e.getMessage());
input.next(); // clear scanner wrong input
continue; // continues to loop if exception is found
}
您需要清除错误的输入,而扫描仪自动不会。
答案 1 :(得分:0)
您可能需要创建一个Scanner类,以获取从键盘流式传输的标准输入。您应该在代码中的某处创建一个语句,该语句创建一个Scanner类的实例,如:Scanner in = new Scanner(System.in);
所以" in"声明中的变量:amountRacers = in.nextInt();等待并扫描键盘输入的输入并存储它。
答案 2 :(得分:0)
今天我解决了这个问题:-)这是我的代码。我想我帮助
public int choice () throws Exception{
Scanner read = new Scanner(System.in));
System.out.println("Choose the option from the upper list");
int auxiliaryChoiceMenu = 5;
int auxiliaryVariable = -1;
boolean auxiliaryBoolean = false;
while (!auxiliaryBoolean) {
try {
auxiliaryVariable = read.nextInt();
read.nextLine();
} catch (Exception e) {
System.out.println("incorrect data, try again"+e);
read.nextLine();
continue;
}
if (auxiliaryVariable<0 || auxiliaryVariable>auxiliaryChoiceMenu){
System.out.println("incorrect data, try again");
} else {
auxiliaryBoolean = true;
}
choiceMenu = auxiliaryVariable;
}
return choiceMenu;
//choicemenu is a external variable
}