題目:編寫控制台程序,輸入兩個整數將其整除,並使用 try-catch 語句捕獲除數為 0 的異常, 並輸出異常消息
代碼1:
1 static void Main(string[] args) 2 { 3 Console.Write("請輸入兩個整數,使用\',\'隔開: "); 4 string[] num = Console.ReadLine().Split(","); 5 float a = float.Parse(num[0]); 6 float b = float.Parse(num[1]);//這里也要有一個顯示類型轉換,如果要得到數學商的話就轉換成浮點型 7 8 try 9 { 10 float quotient = a / b; 11 Console.WriteLine(quotient); 12 } 13 catch(Exception ee) 14 { 15 Console.WriteLine(ee); 16 } 17 Console.ReadKey(); 18 }
會發現沒有拋出異常,而是輸出了無窮大--a,b是float的原因(語法)
代碼2:
1 Console.Write("請輸入兩個整數,使用\',\'隔開: "); 2 string[] num = Console.ReadLine().Split(","); 3 int a = int.Parse(num[0]); 4 int b = int.Parse(num[1]);//這里也要有一個顯示類型轉換,如果要得到數學商的話就轉換成浮點型 5 6 try 7 { 8 int quotient = a / b; 9 Console.WriteLine(quotient); 10 } 11 catch (Exception ee) 12 { 13 Console.WriteLine(ee); 14 } 15 Console.ReadKey();
別的不變,僅將a,b改為int型(當然顯式類型轉換也要改),重新編譯運行:
成功拋出異常
那新的問題又出現了:如果我既要拋出異常,又要是用除法算出小數點的話該怎么做呢?---自定義異常
自定義異常類必須要繼承 Exception 類。
聲明異常的語句如下。
class 異常類名 :Exception
{
}
拋出自己的異常,語句如下
throw( 異常類名 );
class MyException :Exception { public MyException(string message) : base(message) { } }
代碼3:
1 namespace 自定義異常_throw拋出 2 { 3 class MyException : Exception //子類MyException繼承自父類Exception 4 { 5 public MyException(string message) : base(message) 6 { 7 } 8 } 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Console.Write("請輸入兩個整數,使用\',\'隔開: "); 14 string[] num = Console.ReadLine().Split(","); 15 float a = float.Parse(num[0]); 16 float b = float.Parse(num[1]);//這里也要有一個顯示類型轉換,如果要得到數學商的話就轉換成浮點型 17 18 try 19 { 20 if(b==0) 21 { 22 throw new MyException("除數不能為0!"); 23 } 24 float quotient = a / b; 25 Console.WriteLine(quotient); 26 } 27 catch (Exception ex) 28 { 29 Console.WriteLine(ex); 30 } 31 Console.ReadKey(); 32 } 33 } 34 }