我最近刚刚完成了我的第一个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)。请告诉我如何修复这个缺陷的正确方向,并请记住,我还是一个初学者,所以任何建议和信息都将不胜感激。
谢谢
我应用程序的其余代码--
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;
}
}
}
}发布于 2018-04-06 15:53:10
你得到6+6+8= 22,因为你基本上做的是:
FirstNumberFirstNumber被新的6覆盖。F216
另一种方法是创建一个既存储数字又存储相关操作的类型。
因此,工作流程如下所示:
在事件输入6中,按+.
{ op: multiply, value: 6 }存储在'events'.
=时,迭代这些事件的集合并计算结果。发布于 2018-04-06 15:42:51
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,在第二次加法操作中丢失了一个6。和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变量中。
https://stackoverflow.com/questions/49687507
复制相似问题