这是一个以double为输入的简单java函数。它需要一个输入并首先检查该值是否为非数字。然后检查该值是否大于0。
我面临的问题是,每次输入非数字输入时,它都会运行无限循环,只打印"Enter a number greater or equal to 1.0: "
double getInput(double n) {
Scanner kbd = new Scanner(System.in);
boolean flag = false;
boolean check = false;
while (!flag) {
System.out.println("Enter a number greater or equal to 1.0: ");
try {
n = kbd.nextDouble();
if (n >= 0 || n < 0)
check = true;
} catch (InputMismatchException ex) {
err.print("Invalid Data Type (not Numeric)");
}
if (check == true) {
if (n < 0)
System.out.println("Invalid value (too small)");
else
flag = true;
}
}
return n;
}
答案 0 :(得分:0)
Illuminate\Support\Collection
不会消耗换行符,因此会将这些字符重复传递到while循环中。
在catch块中而不是仅抛出异常,您可以传递kbd.nextLine(),以便在下一个循环中输入方法就绪。
kbd.nextDouble
以下是完整的代码:
catch(InputMismatchException ex)
{
System.out.println("Invalid Data Type (not Numeric)");
kbd.nextLine();
}
答案 1 :(得分:0)
从扫描仪读取双值不会读取行尾
n = kbd.nextDouble();
所以扫描程序对象将有一些东西要读取,除非你得到行结束调用
kbd.nextLine();
在异常到来之后完全做到这一点的逻辑点......
catch (InputMismatchException ex) {
System.err.print("Invalid Data Type (not Numeric)");
kbd.nextLine(); ///here!!!
}