2013-12-11 75 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點。