try-catch 块中的 if 语句返回"Infinite"



首先,我是编程新手,刚刚完成了Solo课程。了解C#。我确实理解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异常时,程序返回"0";无限的";作为结果,而不是catch块中的代码。

我想;无限的";结果来自try-catch块中的if语句,但我不确定。

我搜索了多个网站,在stackoverflow上发布了类似的帖子,并阅读了微软关于try-catch块的c#文档,但我就是搞不清。

如果我的代码样本太大,很抱歉,但我认为这是理解我混乱代码的最佳方式。

提前感谢您的快速回复!

更改片段

else {
Console.WriteLine(calc.Division(num1, num2));
}

进入

else {
Console.WriteLine(num2 != 0 
? $"{calc.Division(num1, num2)}" 
:  "can't divide by zero");
}

由于浮点除法不抛出异常,而是返回NaNPositiveInfinityNegativeInfinity:

0.0 / 0.0 == double.NaN
1.0 / 0.0 == double.PositiveInifinity
-1.0 / 0.0 == double.NegativeInfinity 

您的try-catch没有任何问题。如果将double除以零,则不会得到异常。在你的情况下,你得到了Double.PpositiveInfinity。DivideByZeroException仅针对整数或十进制数据类型引发。

最新更新