我的代码应该从用户获取浮点值输入,一旦用户连续输入2个无效输入(非浮点数),程序就会停止并汇总有效输入并向用户吐出总和 . 这是代码:System.out.println(“请输入一组浮点值 . ”);
Scanner keyboard = new Scanner(System.in);
int tries = 0;
int maxTries = 2;
double sum = 0;
while (tries < 2) {
try {
while (keyboard.hasNext()){
sum += keyboard.nextDouble();
tries = 0; // reset counter because of valid input
}
}
catch (InputMismatchException e) {
System.out.println("Invalid input. Float values "
+ "only please.");
tries += 1; // tries +1 because invalid input
}
}
System.out.printf("The sum of your inputs is: %d", sum);
我的例外是过早抛出,一旦我输入一个无效的输入程序停止并总结 . 我无法弄清楚如何允许用户连续两次无效(非浮点)输入,然后抛出异常 . 谢谢 .
3 回答
抛出异常两次,因为键盘扫描程序中仍有输入,并尝试继续读取 . 通过阅读下一行来“冲洗”它 .
此外,在输出上,用%f打印它
扫描仪为您提供
hasNext
和hasNextXXX
,其中XXX是您想要的类型,以避免抛出异常 .无论如何,如果用户提供无效输入,它将保持在流中,直到您使用它为止 . 您可以使用
next()
或(有时更好)使用nextLine()
方法轻松完成此操作 . 所以 avoid using Exceptions as main part of your flow control logic .因此,更改您的代码而不是允许任何类型数据的
hasNext
,请使用hasNextDouble()
.BTW打印浮点数你需要使用
%f
,%d
是整数 .例:
输入:
1 2 3 b 4 foo bar
输出:
处理此问题的更简单方法是将每个输入行作为字符串(keyboard.nextLine)读取 . 然后尝试Double.parseDouble转换为double,catchinh任何NumberFormatException以检查尝试次数等 .