【发布时间】:2021-12-25 13:00:13
【问题描述】:
首先,我是编程新手,刚刚完成了关于 C# 的 SoloLearn 课程。 我确实了解 try-catch 块的核心原理,但我不知道如何在我的代码中正确实现这一点(代码如下所示)。
class Program
{
static void Main(string[] args)
{ //create object of Class Calculator
Calculator calc = new Calculator();
//take user input and store in num1 and print it to screen
try{
double num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("\nnumber1: " + num1);
double num2 = Convert.ToInt32(Console.ReadLine());
Console.Write("\nnumber2: " + num2);
//take operator as input and print it to screen
string operand = Console.ReadLine();
Console.Write("\noperator: " + operand);
//check if operator from user input is equal to one of the 4 calculation methods in Calculator Class
Console.Write("\nresult: ");
if(operand == "+"){
Console.WriteLine(calc.Addition(num1, num2));
}
else if(operand == "-"){
Console.WriteLine(calc.Subtraction(num1, num2));
}
else if(operand == "*"){
Console.WriteLine(calc.Multiplication(num1, num2));
}
else{
Console.WriteLine(calc.Division(num1, num2));
}
}
catch(DivideByZeroException){
Console.WriteLine("can't divide by zero");
}
catch(Exception e){
Console.WriteLine("An error occurred. Only integers are allowed!");
}
}
}//class Calculator with methods for 4 simple calculations
class Calculator{
private double number1;
private double number2;
private double res;
public double Addition(double num1, double num2){
this.number1 = num1;
this.number2 = num2;
this.res = num1 + num2;
return res;
}
public double Subtraction(double num1, double num2){
this.number1 = num1;
this.number2 = num2;
this.res = num1 - num2;
return res;
}
public double Multiplication(double num1, double num2){
this.number1 = num1;
this.number2 = num2;
this.res = num1 * num2;
return res;
}
public double Division(double num1, double num2){
this.number1 = num1;
this.number2 = num2;
this.res = num1 / num2;
return res;
}
}
所以我希望我的简单计算器能够处理异常“DivideByZero”和“异常 e”-> 如果输入不是整数。
当我使用示例输入 4/0 测试 DivideByZero 异常时,程序返回“Infinite”作为结果,而不是来自 catch 块的代码。
我猜“无限”结果来自 try-catch 块中的 if 语句,但我不确定。
我搜索了多个站点,stackoverflow 上的类似帖子,并阅读了有关 c# 的有关 try-catch 块的 Microsoft 文档,但我就是想不通。
对不起,如果我的代码示例太大,但我认为这是理解我的代码混乱的最佳方式。
提前感谢您的快速回复!
【问题讨论】:
-
除以0是为
doubles定义的,不会抛出异常。如果您真的希望它输出“不能被零除”,您可以手动检查除数是否为0。 -
所以不需要第一个catch块,而是我可以使用另一个if语句来检查输入是否等于0?