c# - 为什么我的 "Divide by Zero"预防不起作用?

标签 c#

<分区>

我一直在使用 C# 开发计算器,遇到了一个我无法解决的问题。

目前,当用户输入一个除以零的数字时,答案默认为 0.00,而实际上它应该是无效的。

我不知道为什么,在修改了一段时间后我还是没弄明白。相关代码如下:

private void button1_Click(object sender, EventArgs e)
{
                double number1, number2, ans; // Identify variables as double to account for decimals.
                number1 = Convert.ToDouble(num1.Text); // Convert the contents of the textBox into a double.
                number2 = Convert.ToDouble(num2.Text); // 
                ans = 0.0;
                string symbol = modifier1.Text;

                if (symbol == "/" && number2 == 0) // This part seems to be broken.
                    answer.Text = "Invalid input.";
                else
                    if (symbol == "+")
                        ans = number1 + number2;
                    else if (symbol == "-")
                        ans = number1 - number2;
                    else if (symbol == "/")
                        ans = number1 / number2;
                    else if (symbol == "*")
                        ans = number1 * number2;
                    else
                        ans = 0;

                    answer.Text = ans.ToString("n"); // Change label value to a number.
}

有人知道我该如何解决这个问题吗?这看起来很简单,但我遗漏了一些东西。

最佳答案

改变这个:

if (symbol == "/" && number2 == 0) // This part seems to be broken.
                answer.Text = "Invalid input.";

收件人:

if (symbol == "/" && number2 == 0) { answer.Text = "Invalid input."; return; }

解释: 您代码中“if”子句中的条件是正确的。它做了预期的事情 - 它将 answer.Text 属性更改为“无效输入”但是稍后它在这一行再次更改:

answer.Text = ans.ToString("n"); // Change label value to a number.

并且因为您在“if”子句中的条件返回 true - “else” block 未执行。这就是您看到 0.00( double 类型的默认值)的原因。

附言 因此,通过将 return 语句添加到 if 子句,您基本上可以结束您的方法。 这就像你对编译器说*“嘿如果这家伙试图除以零提醒他'Ivalid input'并且什么都不做,从方法返回”。*

解决问题的其他方法是:

if (divide by zero attempt) { your code here } else
{
    and place rest of your method code here
}

但我不推荐这样做,因为它使用了多余的 else 语句和 {} 数字。您可以使用 if() {....; 来避免所有这些情况。返回; } 在你的情况下。

您还可以从使用 switch block 中获益,您的代码可能会被重构为如下内容:

double number1, number2, ans; // Identify variables as double to account for decimals.
number1 = Convert.ToDouble(num1.Text); // Convert the contents of the textBox into a double.
number2 = Convert.ToDouble(num2.Text); // 
ans = 0.0;
string symbol = modifier1.Text;

if (symbol == "/" && number2 == 0) { answer.Text = "Invalid input."; return;}
switch(symbol)
{
   case "+": ans = number1 + number2; break;
   case "-": ans = number1 - number2; break;
   case "*": ans = number1 * number2; break;
   case "/": ans = number1 / number2; break;
   default : answer.Text = "Invalid sign."; return;
}                

answer.Text = ans.ToString("n"); // Change label value to a number.

关于c# - 为什么我的 "Divide by Zero"预防不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31469680/

相关文章:

c# - Cookie 身份验证 ASP.NET Core

C# 窗体 : Set text in ComboBox based on selected Item

C# 为什么属性的 get 和 set 方法都称为 accessor 而不是 accessor 和 mutator?

c# - Azure 应用服务在执行检索时抛出未找到数据库的错误

c# - 为 Unity Mobile App 显示 Android Date Picker DIALOGUE

c# - 面向业务逻辑的 OO 设计

c# - 将 txt 转换为 rtf

c# - Stream Reader 进程无法访问文件,因为它正在被另一个进程使用

c# - 是否可以重定向到 MVC 中的非 Controller 类查看

c# - 在 .Where() 内嵌套 .Select()