Board logo

標題: 例外處理 (二) [打印本頁]

作者: 周政輝    時間: 2018-10-6 13:43     標題: 例外處理 (二)

所謂「例外」,就是當程式碼編輯完,在編譯期間沒有出現錯誤訊息,但在程式執行時卻發生錯誤,這種錯誤又稱為執行時期錯誤(Runtime error)。

在編譯程式或執行程式時常會遇到各種不同錯誤,以致無法正常完成工作。研發軟體時最容易遇到三種錯誤(Bug):語法錯誤、執行時期錯誤、邏輯錯誤。

1. 語法錯誤
語法錯誤是初學者最容易犯的錯誤。在編譯過程中,系統常能立即指出此種錯誤的所在,並要求程式設計者修正後才能正式執行。這樣錯誤最容易解決,只要熟悉語法多多練習就可以減少錯誤產生。

2. 執行時期錯誤
程式在執行時,因為輸入資料不符合、在計算過程分母為0、磁碟中無此檔案存在、陣列的索引值超出陣列宣告範圍…等,使得程式中斷執行。這種錯誤的問題在編譯時,並不會發生,被Java稱為「例外」,而Java也提供了例外處理的方式來解決問題。

3. 邏輯錯誤
邏輯錯誤是最難找出的,尤其在大型應用程式最為明顯。程式在執行過程並沒有出現錯誤,也會有執行結果,甚至有時候結果是正確的。除非你仔細觀察,多人多次測試,否則不見得會發現。因此誤信其執行結果,往往造成很大損失。有些系統提供偵錯(Debug)工具,用來協助找出錯誤之處。若沒有偵錯工具,就只能自己設定偵測點,輸出目前主要變數內容是否如預測結果,以推測可能錯誤之處,再仔細研讀程式,尋找邏輯上錯誤之處,加以修正。

試寫一個除法程式, 測試當分母為零, 以及輸入字母時, 產生的例外.
[attach]4925[/attach]
作者: 鄭楀諺    時間: 2018-10-6 14:07

  1. package morris;

  2. import java.util.Scanner;

  3. public class morris {

  4.         public static void main(String[] args) {
  5.                 // TODO 自動產生的方法 Stub
  6.                 Scanner scanner=new Scanner(System.in);
  7.                 System.out.print("Please type in the numerator");
  8.                 int num1=scanner.nextInt();
  9.                 System.out.print("Please type in the denominator");
  10.                 int num2=scanner.nextInt();
  11.                 int result=0;
  12.                 try
  13.                 {
  14.                         result=num1/num2;
  15.                 }
  16.                 catch(Exception ex)
  17.                 {
  18.                         System.out.println(ex);
  19.                 }
  20.                 System.out.println(result);
  21.         }

  22. }
複製代碼

作者: 王駿愷    時間: 2018-10-6 14:09

  1. package mhjh.mtc;

  2. import java.util.Scanner;

  3. public class WWW {

  4.         public static void main(String[] args) {
  5.                 // TODO 自動產生的方法 Stub
  6.         Scanner scanner= new Scanner(System.in);
  7.         System.out.println("請輸入分子");
  8.         int num1=scanner.nextInt();
  9.         System.out.println("請輸入分母");
  10.         int num2=scanner.nextInt();
  11.         int result=0;
  12.         try{
  13.                 result=num1/num2;
  14.         }
  15.         catch(Exception ex)
  16.         {
  17.           System.out.println(ex.toString());
  18.         }
  19.         System.out.println(result);
  20.         
  21.         }

  22. }
複製代碼

作者: 高允懋    時間: 2018-10-6 14:10

  1. package kao;

  2. import java.util.Scanner;

  3. public class Main
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Scanner scanner=new Scanner(System.in);
  8.         System.out.print("請輸入分子:");
  9.         int num1=scanner.nextInt();
  10.         System.out.print("請輸入分母:");
  11.         int num2=scanner.nextInt();
  12.         int result=0;
  13.         try{
  14.                 result=num1/num2;
  15.         }
  16.         catch(Exception ex){
  17.                 System.out.println(ex.toString());
  18.         }
  19.         System.out.println(result);
  20.         }
  21. }
複製代碼

作者: 彭煥宇    時間: 2018-10-6 14:10

  1. package bbs.istak.org.tw;

  2. import java.util.Scanner;

  3. public class Main {

  4.         public static void main(String[] args) {
  5.                 // TODO 自動產生的方法 Stub
  6.                 Scanner scanner=new Scanner(System.in);
  7.         System.out.print("請輸入分子");
  8.         int num1=scanner.nextInt();
  9.         System.out.print("請輸入分母");
  10.         int num2=scanner.nextInt();
  11.         int result=0;
  12.         try
  13.         {
  14.                 result=num1/num2;
  15.         }
  16.         catch(Exception ex)
  17.         {
  18.                 System.out.println(ex);
  19.         }
  20.         System.out.println(result);
  21.         }

  22. }
複製代碼

作者: 吳秉翰    時間: 2018-10-6 14:13

  1. package bn.tw;

  2. import java.util.Scanner;

  3. public class Main {

  4.         public static void main(String[] args) {
  5.                 // TODO 自動產生的方法 Stub
  6.                 Scanner scanner = new Scanner(System.in);
  7.                 int result=0;
  8.                 System.out.println("分母");
  9.                 int num1=scanner.nextInt();
  10.                 System.out.println("分子");
  11.                 int num2=scanner.nextInt();
  12.         try {
  13.                 result=num2/num1;
  14.         }
  15.         catch (Exception ex) {
  16.                 System.out.println(ex.toString());
  17.         }
  18.         System.out.println(result);
  19.         }

  20. }
複製代碼

作者: 黃安立    時間: 2018-10-6 14:28

  1. [code]
  2. import java.util.Scanner;
  3. public class CH011
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Scanner scanner=new Scanner(System.in);
  8.         System.out.print("請輸入分子:");
  9.         int num1=scanner.nextInt();
  10.         System.out.print("請輸入分母:");
  11.         int num2=scanner.nextInt();
  12.         int result=0;
  13.         try
  14.         {
  15.                 result=num1/num2;
  16.         }
  17.         catch(Exception ex)
  18.         {
  19.                 System.out.println(ex.toString());
  20.         }
  21.         System.out.println(result);
  22.         }
  23. }
複製代碼
[/code]
作者: 湯東緯    時間: 2018-10-6 14:32

  1. package main;

  2. import java.util.Scanner;

  3. public class Main {

  4.      public static void main(String[] args) {
  5.         // TODO 自動產生的方法 Stub
  6.         Scanner scanner=new Scanner(System.in);
  7.         System.out.print("請輸入分子");
  8.         int num1=scanner.nextInt();
  9.         System.out.print("請輸入分母");
  10.         int num2=scanner.nextInt();
  11.         int result=0;
  12.         try
  13.         {
  14.         result=num1/num2;
  15.         }
  16.         catch(Exception ex)
  17.         {
  18.          System.out.println(ex);
  19.         }
  20.          System.out.println(result);
  21.         }

  22. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/) Powered by Discuz! 7.2