Try/Catch 使用用户输入循环 Java
Try/Catch looping in Java with user input
我的代码应该从用户那里获取浮点值输入,一旦用户连续输入 2 个无效输入(非浮点),程序就会停止并对有效输入求和并将总和输出给用户。这是代码:
System.out.println("Please input a set of float values.");
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);
我的异常被过早抛出,一旦我输入一个无效输入,程序就会停止并进行总结。我不知道如何允许用户连续输入两个无效(非浮点数)然后抛出异常。谢谢
try{
Scanner keyboard = new Scanner(System.in);
int tries = 0;
int maxTries = 2;
double sum = 0;
while (tries < 2) {
try {
while (keyboard.hasNext()){
double d = keyboard.nextDouble();
sum += d;
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
keyboard.nextLine();
}
}
System.out.printf("The sum of your inputs is: %f", sum);
}catch(Exception e){
e.printStackTrace();
}
异常抛出两次,因为键盘扫描器中仍有输入,并试图继续读取。 'flush' 通过阅读下一行。
另外,在输出中,打印一个 %f
Scanner 为您提供 hasNext
和 hasNextXXX
,其中 XXX 是您想要准确避免抛出异常的类型。
无论如何,如果用户提供了无效输入,它将一直保持在流中,直到您使用它。您可以使用 next()
或(有时更好)使用 nextLine()
方法轻松完成。所以避免使用异常作为流控制逻辑的主要部分。
因此请更改您的代码,使用 hasNextDouble()
.
而不是允许任何类型数据的 hasNext
顺便说一句,要打印浮点数,您需要使用 %f
,%d
用于整数。
Scanner keyboard = new Scanner(System.in);
int tries = 0;
int maxTries = 2;
double sum = 0;
while (tries < maxTries) {
if (keyboard.hasNextDouble()) {
sum += keyboard.nextDouble();
tries = 0; // reset counter because of valid input
} else {
System.out.println("Invalid input. Float values "
+ "only please.");
keyboard.next();// consume one invalid token from user input
tries += 1; // tries +1 because invalid input
}
}
System.out.printf("The sum of your inputs is: %f", sum);
示例:
输入:1 2 3 b 4 foo bar
输出:
1 2 a 3 a 4 aa a
Invalid input. Float values only please.
Invalid input. Float values only please.
Invalid input. Float values only please.
The sum of your inputs is: 10,000000
更简单的处理方法是将每个输入行作为字符串读取 (keyboard.nextLine)。然后尝试 Double.parseDouble 转换成双精度数,捕获任何 NumberFormatException 以检查尝试次数等
我的代码应该从用户那里获取浮点值输入,一旦用户连续输入 2 个无效输入(非浮点),程序就会停止并对有效输入求和并将总和输出给用户。这是代码: System.out.println("Please input a set of float values.");
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);
我的异常被过早抛出,一旦我输入一个无效输入,程序就会停止并进行总结。我不知道如何允许用户连续输入两个无效(非浮点数)然后抛出异常。谢谢
try{
Scanner keyboard = new Scanner(System.in);
int tries = 0;
int maxTries = 2;
double sum = 0;
while (tries < 2) {
try {
while (keyboard.hasNext()){
double d = keyboard.nextDouble();
sum += d;
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
keyboard.nextLine();
}
}
System.out.printf("The sum of your inputs is: %f", sum);
}catch(Exception e){
e.printStackTrace();
}
异常抛出两次,因为键盘扫描器中仍有输入,并试图继续读取。 'flush' 通过阅读下一行。
另外,在输出中,打印一个 %f
Scanner 为您提供 hasNext
和 hasNextXXX
,其中 XXX 是您想要准确避免抛出异常的类型。
无论如何,如果用户提供了无效输入,它将一直保持在流中,直到您使用它。您可以使用 next()
或(有时更好)使用 nextLine()
方法轻松完成。所以避免使用异常作为流控制逻辑的主要部分。
因此请更改您的代码,使用 hasNextDouble()
.
而不是允许任何类型数据的 hasNext
顺便说一句,要打印浮点数,您需要使用 %f
,%d
用于整数。
Scanner keyboard = new Scanner(System.in);
int tries = 0;
int maxTries = 2;
double sum = 0;
while (tries < maxTries) {
if (keyboard.hasNextDouble()) {
sum += keyboard.nextDouble();
tries = 0; // reset counter because of valid input
} else {
System.out.println("Invalid input. Float values "
+ "only please.");
keyboard.next();// consume one invalid token from user input
tries += 1; // tries +1 because invalid input
}
}
System.out.printf("The sum of your inputs is: %f", sum);
示例:
输入:1 2 3 b 4 foo bar
输出:
1 2 a 3 a 4 aa a
Invalid input. Float values only please.
Invalid input. Float values only please.
Invalid input. Float values only please.
The sum of your inputs is: 10,000000
更简单的处理方法是将每个输入行作为字符串读取 (keyboard.nextLine)。然后尝试 Double.parseDouble 转换成双精度数,捕获任何 NumberFormatException 以检查尝试次数等