排序错误输出

时间:2013-12-11 00:29:41

标签: java exception-handling try-catch

import java.util.Scanner;
import java.util.InputMismatchException;

public class Main
{
    public static int quotient(int a, int b) throws ArithmeticException
    {
        return a / b;
    }

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        boolean continueLoop = true;

        do
        {
            try
            {
                System.out.print("Enter integer numerator: ");
                int numerator = scan.nextInt();

                System.out.print("Enter integer denomiantor: ");
                int denominator = scan.nextInt();

                int result = quotient(numerator, denominator);
                System.out.println("Result: " + numerator + " / " + denominator
                        + " = " + result);
                continueLoop = false;
            } 

            catch (InputMismatchException inputMismatchException)
            {
                System.err.println("\nException: " + inputMismatchException);
                scan.nextLine();
                System.out.println("\nSolution: Must enter an integer");
            }

            catch (ArithmeticException arithmeticException)
            {
                System.err.println("\nException" + arithmeticException);
                System.out.println("Solution: Zero is an invalid denominator");
            }
        } while (continueLoop);
    }
}

输出:

Enter integer numerator: 5
Enter integer denomiantor: 0
Solution: Zero is an invalid denominator
Enter integer numerator: 
Exceptionjava.lang.ArithmeticException: / by zero

我很困惑为什么最后会显示System.err.println消息?如果我遗漏scan.nextLine();

,为什么会出现无限循环呢?

1 个答案:

答案 0 :(得分:2)

一次一个:

  

我很困惑为什么最后会显示System.err.println消息?

输出流直接进入您的控制台。 错误流在执行期间缓冲,并在程序终止时刷新。因此它最终出现了。

  

如果我省略scan.nextLine();?

,为什么还会出现无限循环

如果你没有“扫描”前一行,总是找到无效的整数,总是抛出异常,永远不会到continueLoop变为false的位置。