我一直在使用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.
}
有没有人对如何解决这个问题有任何想法?看起来很简单,但我错过了一些东西。
答案 0 :(得分:11)
改变这个:
if (symbol == "/" && number2 == 0) // This part seems to be broken.
answer.Text = "Invalid input.";
致:
if (symbol == "/" && number2 == 0) { answer.Text = "Invalid input."; return; }
说明: 条件是'如果'你的代码中的子句是正确的。它完成了预期的工作 - 它将answer.Text属性更改为"输入无效"但稍后它会在这一行再次改变:
answer.Text = ans.ToString("n"); // Change label value to a number.
因为你的情况如果'条款返回true - ' else'块没有被执行。这就是为什么你看到0.00(默认值为double类型)的原因。
P.S。
因此,通过向if子句添加return
语句,您基本上可以结束您的方法。
就像你对编译器说'"嘿如果这个人试图divide by zero
提醒他'输入错误'并且什么都不做,从方法返回"。*
其他解决方法是:
if (divide by zero attempt) { your code here } else
{
and place rest of your method code here
}
但我不建议这样做,因为它使用了多余的else语句和{}数字。你可以使用if(){....;返回;在你的情况下。
使用switch
阻止您也可能会受益,您的代码可能会重构为:
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.
答案 1 :(得分:4)
为了帮助您了解出现了什么问题,它有助于在编译器看到它时放置代码,而不是您想象它的工作方式:
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.
因此,当出现除零情况时,首先将answer.Text
设置为“输入无效。”,然后控制流将下降到最后一行并被0.0
覆盖。
巧妙地强调了为什么使用{}
甚至单个语句非常重要。这样做,代码将按预期工作:
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.
}
答案 2 :(得分:1)
在此处查看C#中if else条件的基础知识 https://msdn.microsoft.com/en-us/library/5011f09h.aspx