2013-12-11 77 views
0
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();,为什么会出现无限循环?

回答

2

一次一个:

我对为什么在最后显示的通信System.err.println消息混淆?

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

此外,为什么会发生无限循环,如果我离开了scan.nextLine();?

它仍然是“扫描”前行,如果你不这样做,总是找无效的整数,总是抛出异常,从未获得到continueLoop成为false点。