編寫一個程式,根據使用者輸入的總人數和總成績計算平均成績。要求程式能夠處理總人數或者總成績不是數位時的情況。
根據題目要求得知,在程式中需要對多種異常情況進行不同的處理。此時就用到了在《Java try catch語句詳解》一節學習的多重 catch 語句。
使用多重 catch 語句時,Java 虛擬機器會把實際拋出的異常物件依次和各個 catch 程式碼塊中宣告的異常型別匹配,如果異常物件為某個異常型別或者其子類的範例,就執行該 catch 程式碼塊,而跳過其它的 catch 程式碼塊。具體實現程式碼如下:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try {
System.out.println("請輸入班級總人數:");
int count = input.nextInt();
System.out.println("請輸入總成績:");
int score = input.nextInt();
int avg = score / count; // 獲取平均分
System.out.println("本次考試的平均分為:" + avg);
} catch (InputMismatchException e1) {
System.out.println("輸入數值有誤!");
} catch (ArithmeticException e2) {
System.out.println("輸入的總人數不能為0!");
} catch (Exception e3) {
e3.printStackTrace();
System.out.println("發生錯誤!" + e3.getMessage());
}
}
}
如上述程式碼,在 main() 方法中使用了多重 catch 語句來捕獲各種可能發生的異常,包括 InputMismatchException 異常、ArithmeticException 異常以及其他型別的異常。
當使用者輸入的總人數或者總成績不為數值型別時,程式將拋出 InputMismatchException 異常,從而執行第 15 行程式碼,輸出結果如下所示:
請輸入班級總人數:
50
請輸入總成績:
1250a
輸入數值有誤!
請輸入班級總人數:
50a
輸入數值有誤!
當輸入的總人數為 0 時,計算平均成績就會出現被除數為 0 的情況,此時會拋出 ArithmeticException 異常,從而執行第 17 行程式碼,輸出結果如下所示:
請輸入班級總人數:
0
請輸入總成績:
100
輸入的總人數不能為0!
如下所示的是當輸入的總人數和總成績均為正常數值型別時的輸出結果:
請輸入班級總人數:
50
請輸入總成績:
1250
本次考試的平均分為:25