我刚刚完成了我的第一个Windows窗体计算器工作正常,但我的问题是 - 如何在达到等号之前在计算中添加第三个,甚至第四个数字?我一直在尝试将ThirdNumber变量放在代码中的许多不同位置,如此 -
private void bequal_Click(object sender, EventArgs e)
{
double SecondNumber;
double ThirdNumber;
double Result;
SecondNumber = Convert.ToDouble(textBox1.Text);
ThirdNumber = Convert.ToDouble(textBox1.Text);
if (Operation == "+")
{
Result = (FirstNumber + SecondNumber) + ThirdNumber;
textBox1.Text = Convert.ToString(Result);
FirstNumber = Result;
}
但是,每次给出错误答案时(例如6 + 6 + 8 = 22,当我知道应该是20时)。有人可以指出我正确的方向,如何解决这个缺陷,请记住,我仍然是一个初学者,所以任何和所有的建议和信息将不胜感激
由于
App的其余代码 -
public partial class Form1 : Form
{
double FirstNumber;
string Operation;
public Form1()
{
InitializeComponent();
}
private void n1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" && textBox1.Text != null) // If the textbox value is 0 or is not null then
{ // the number that corresponds to the button that is clicked
textBox1.Text = "1"; // will be subsituted in
}
else
{ // Else add the button value to the existing text box value
textBox1.Text = textBox1.Text + "1";
}
}
private void n2_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" && textBox1.Text != null)
{
textBox1.Text = "2";
}
else
{
textBox1.Text = textBox1.Text + "2";
}
}
private void n3_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" && textBox1.Text != null)
{
textBox1.Text = "3";
}
else
{
textBox1.Text = textBox1.Text + "3";
}
}
private void n4_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" && textBox1.Text != null)
{
textBox1.Text = "4";
}
else
{
textBox1.Text = textBox1.Text + "4";
}
}
private void n5_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" && textBox1.Text != null)
{
textBox1.Text = "5";
}
else
{
textBox1.Text = textBox1.Text + "5";
}
}
private void n6_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" && textBox1.Text != null)
{
textBox1.Text = "6";
}
else
{
textBox1.Text = textBox1.Text + "6";
}
}
private void n7_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" && textBox1.Text != null)
{
textBox1.Text = "7";
}
else
{
textBox1.Text = textBox1.Text + "7";
}
}
private void n8_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" && textBox1.Text != null)
{
textBox1.Text = "8";
}
else
{
textBox1.Text = textBox1.Text + "8";
}
}
private void n9_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" && textBox1.Text != null)
{
textBox1.Text = "9";
}
else
{
textBox1.Text = textBox1.Text + "9";
}
}
private void n0_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + "0";
}
private void bad_Click(object sender, EventArgs e)
{
FirstNumber = Convert.ToDouble(textBox1.Text);
textBox1.Text = "0";
Operation = "+";
}
private void sub_Click(object sender, EventArgs e)
{
FirstNumber = Convert.ToDouble(textBox1.Text);
textBox1.Text = "0";
Operation = "-";
}
private void bmul_Click(object sender, EventArgs e)
{
FirstNumber = Convert.ToDouble(textBox1.Text);
textBox1.Text = "0";
Operation = "*";
}
private void bdiv_Click(object sender, EventArgs e)
{
FirstNumber = Convert.ToDouble(textBox1.Text);
textBox1.Text = "0";
Operation = "/";
}
private void bc_Click(object sender, EventArgs e)
{
textBox1.Text = "0";
}
private void bdot_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text + ",";
}
private void bequal_Click(object sender, EventArgs e)
{
double SecondNumber;
double ThirdNumber;
double Result;
SecondNumber = Convert.ToDouble(textBox1.Text);
ThirdNumber = Convert.ToDouble(textBox1.Text);
if (Operation == "+")
{
Result = (FirstNumber + SecondNumber) + ThirdNumber;
textBox1.Text = Convert.ToString(Result);
FirstNumber = Result;
}
else if (Operation == "-")
{
Result = (FirstNumber - SecondNumber);
textBox1.Text = Convert.ToString(Result);
FirstNumber = Result;
}
else if (Operation == "*")
{
Result = (FirstNumber * SecondNumber);
textBox1.Text = Convert.ToString(Result);
FirstNumber = Result;
}
else if (Operation == "/")
{
if (SecondNumber == 0)
{
textBox1.Text = "Cannot divide by zero";
}
else
{
Result = (FirstNumber / SecondNumber);
textBox1.Text = Convert.ToString(Result);
FirstNumber = Result;
}
}
}
}
答案 0 :(得分:1)
你得到6 + 6 + 8 = 22因为你基本上做的是:
FirstNumber
FirstNumber
被新的6覆盖。FirstNumber
- 即6 - 并将两次添加8 另一种方法可能是创建一个存储数字和相关操作的类型。
所以工作流程就像:
+
。{ op: multiply, value: 6 }
等信息存储在“事件”的集合中。=
会迭代这些“事件”的集合并计算结果。答案 1 :(得分:1)
我假设你想要模仿一个真正的计算器,而不是用第一,第二和第三个数字来思考。
对于简单的计算器,您真正想要的是累加器。这是一个单变量/寄存器,我们存储我们计算的最后一个结果。 1
任何"操作"按下按钮,然后需要考虑累加器中的当前值,文本框的当前内容以及按下的上一个操作按钮。然后,您可以在累加器和文本框中的数字之间执行 操作,使用该新值更新累加器和文本框,并记录您刚开始执行的新操作。您应该能够将大部分逻辑放入一个功能中,以便您的所有"操作"按钮电话。
然后,等于按钮变得非常类似于其他操作按钮。这里有一些细微差别你可能想要考虑某人按下" ="按钮,然后立即按下另一个操作按钮 - 你可能会发现你想要至少两个"操作"区分"我只是显示最后一个结果,因为有人按下了=键 - 他们可以在此时开始另一个操作"和#34;我正在显示一个结果,但他们现在开始输入其他内容,所以当按下操作键时,我们希望用这个新输入覆盖累加器"。
1 一旦你有了这个工作,然后添加第二个变量,这个变量称为" Memory"。然后,您可以实施" M"," M +"," M - "," MC"," MR&大多数计算器上都有#34;等按钮。
答案 2 :(得分:0)
private void bdiv_Click(object sender, EventArgs e)
{
FirstNumber = Convert.ToDouble(textBox1.Text);
textBox1.Text = "0";
Operation = "/";
}
每当你按下' +'按钮,第一个数字将被重置,旧值将丢失。
SecondNumber = Convert.ToDouble(textBox1.Text);
ThirdNumber = Convert.ToDouble(textBox1.Text);
第二个和第三个数字总是相同的。
6 + 6 + 8在你的计算器中得到22,因为它实际上计算了6 + 8 + 8。 其中一个在第二个添加操作中丢失了。并且8是重复的,因为第二个和第三个数字将等于textBox1.Text。
解决方案:
使用+ =操作
private void bdiv_Click(object sender, EventArgs e)
{
FirstNumber += Convert.ToDouble(textBox1.Text);
textBox1.Text = "0";
Operation = "/";
}
删除SecondNumber变量。
SecondNumber = Convert.ToDouble(textBox1.Text); // remove this line
ThirdNumber = Convert.ToDouble(textBox1.Text);
不需要第二个数字,因为它现在位于FirstNumber变量中。