题目:编写控制台程序,输入两个整数将其整除,并使用 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 }