这是我的Java代码:
Scanner userInput = new Scanner(System.in);
while (true) { // forever loop
try {
System.out.print("Please type a value: "); // asks user for input
double n = userInput.nextDouble(); // gets user input as a double
break; // ends if no error
}
catch (Throwable t) { // on error
System.out.println("NaN"); // not a number
}
}
你可以从评论中看到这应该做什么。
但是当我输入不是数字的东西时,会发生这种情况:
Please type a value: abc
NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
依此类推,直到我强制停止它为止。
在Python中我会这样做:
while True:
try:
n = float(raw_input("Please type a value: "))
break
except Exception:
print "NaN"
我如何用Java做到这一点?
我尝试过使用do while
。
答案 0 :(得分:2)
在catch
阻止中调用nextLine()方法。
使此扫描程序超过当前行并返回该输入 被跳过了。此方法返回当前行的其余部分, 排除末尾的任何行分隔符。该职位设定为 下一行的开头。
由于此方法继续搜索输入以查找a 行分隔符,它可以缓冲搜索该行的所有输入 如果没有行分隔符则跳过。
catch (InputMismatchException t) { // on error
userInput.nextLine();
System.out.println("NaN"); // not a number
}
答案 1 :(得分:1)
while (true) { // forever loop
try {
scanner userInput = new Scanner(System.in);
System.out.print("Please type a value: "); // asks user for input
double n = userInput.nextDouble(); // gets user input as a double
break; // ends if no error
}
catch (Throwable t) { // on error
System.out.println("NaN"); // not a number
}
}
你应该在while循环中使用scanner类,只有当给定的输入值错误时才会询问下一个输入值。
答案 2 :(得分:0)
试试这个,
double n;
boolean is_valid;
do {
try {
System.out.print("Please type a value: ");
Scanner kbd = new Scanner(System.in);
n = kbd.nextDouble();
is_valid = true;
} catch (Exception e) {
System.out.println("NaN");
is_valid = false;
}
}
while (!is_valid);
答案 3 :(得分:0)
如上所述, 您可以这样更改:
Scanner userInput = new Scanner(System.in);
while (true) { // forever loop
try {
System.out.print("Please type a value: "); // asks user for input
double n = userInput.nextDouble(); // gets user input as a double
break; // ends if no error
}
catch (Throwable t) { // on error
System.out.println("NaN"); // not a number
userInput.nextLine();
}
}