我正在编写一个简单的除法程序。用户输入分子和分母。分子和分母是在用户不输入整数时引发异常。此外,如果用户输入 0,分母应引发异常。该错误应告诉用户每次他们做错了什么,并继续循环,直到输入正确的输入。然后,当值正确时,它应该退出。
为什么当用户输入不正确的分母条目时,它会再次请求分子?
import java.util.InputMismatchException;
import java.util.Scanner;
public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.printf("Welcome to Division n");
Scanner div = new Scanner(System.in);
boolean continueLoop = true;
do
{
try
{
System.out.println("nEnter a numerator:n");
int num1 = div.nextInt();
System.out.println("Enter a denominator:");
int num2 = div.nextInt();
int result = quotient(num1, num2);
System.out.printf("The Answer is: %d / %d = %d%n",num1,num2,result);
}
catch(InputMismatchException inputMismatchException)
{
System.err.printf("n Exception n",inputMismatchException );
div.nextLine();
System.out.printf("You must enter integers");
}
catch(ArithmeticException arithmeticException)
{
System.err.printf("n Exception n",arithmeticException);
System.out.printf(" Zero is an invalid entry");
}
} while (continueLoop);
System.out.printf("n GOODBYE n");
}
}
您捕获了异常,但 continueLoop 的值永远不会更新
一个嵌套的while循环。这是您的斜体问题的答案。它再次要求分子,因为您的 do while 循环从输入分子开始。
如果您希望程序在引发异常时停止,则可以执行以下操作:
try {
do {
System.out.println("nEnter a numerator:n");
int num1 = div.nextInt();
System.out.println("Enter a denominator:");
int num2 = div.nextInt();
int result = quotient(num1, num2);
System.out.printf("The Answer is: %d / %d = %d%n", num1, num2, result);
} while (continueLoop);
} catch (ArithmeticException arithmeticException) {
System.err.printf("n Exception n", arithmeticException);
System.out.printf(" Zero is an invalid entry");
} catch (InputMissMatchException inputMismatchException) {
System.err.printf("n Exception n", inputMismatchException);
div.nextLine();
System.out.printf("You must enter integers");
}
System.out.printf("n GOODBYE n");
但是现在你发现在 while 循环内,你的程序打印来自异常的消息并再次继续。如果你想继续这样,你可以在异常后输入一个验证,如果这个人想继续运行你的程序或类似的东西,你可以连接到你的continueLoop