try-catch 块中的 if 语句 returns "Infinite"
if-statement inside a try-catch block returns "Infinite"
首先,我是编程新手,刚刚完成有关 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”和“Exception e”-> 如果输入不是整数。
当我使用示例输入 4/0 测试 DivideByZero 异常时,程序 returns“无限”作为结果而不是 catch 块中的代码。
我猜“无限”结果来自 try-catch 块中的 if 语句,但我不确定。
我搜索了多个站点、Whosebug 上的类似帖子并阅读了有关 try-catch 块的 c# 的 Microsoft 文档,但我就是想不通。
抱歉,如果我的代码示例太大,但我认为这是理解我的代码混乱的最佳方式。
提前感谢您的快速回复!
你的try catch没有问题。如果将 double
除以零,则不会出现异常。你得到 Double.PositiveInfinity 作为你的案例的结果。
DivideByZeroException 仅针对整数或小数数据类型抛出。
更改片段
else {
Console.WriteLine(calc.Division(num1, num2));
}
进入
else {
Console.WriteLine(num2 != 0
? $"{calc.Division(num1, num2)}"
: "can't divide by zero");
}
因为浮点数除法不会抛出异常但是returnsNaN
,PositiveInfinity
和 NegativeInfinity
:
0.0 / 0.0 == double.NaN
1.0 / 0.0 == double.PositiveInifinity
-1.0 / 0.0 == double.NegativeInfinity
首先,我是编程新手,刚刚完成有关 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”和“Exception e”-> 如果输入不是整数。
当我使用示例输入 4/0 测试 DivideByZero 异常时,程序 returns“无限”作为结果而不是 catch 块中的代码。
我猜“无限”结果来自 try-catch 块中的 if 语句,但我不确定。
我搜索了多个站点、Whosebug 上的类似帖子并阅读了有关 try-catch 块的 c# 的 Microsoft 文档,但我就是想不通。
抱歉,如果我的代码示例太大,但我认为这是理解我的代码混乱的最佳方式。
提前感谢您的快速回复!
你的try catch没有问题。如果将 double
除以零,则不会出现异常。你得到 Double.PositiveInfinity 作为你的案例的结果。
DivideByZeroException 仅针对整数或小数数据类型抛出。
更改片段
else {
Console.WriteLine(calc.Division(num1, num2));
}
进入
else {
Console.WriteLine(num2 != 0
? $"{calc.Division(num1, num2)}"
: "can't divide by zero");
}
因为浮点数除法不会抛出异常但是returnsNaN
,PositiveInfinity
和 NegativeInfinity
:
0.0 / 0.0 == double.NaN
1.0 / 0.0 == double.PositiveInifinity
-1.0 / 0.0 == double.NegativeInfinity