C#计算器在某些操作中使用列表数组时出错Windows窗体应用程序

C#计算器在某些操作中使用列表数组时出错Windows窗体应用程序,c#,calculator,C#,Calculator,您好,我还是编程新手,是的,这不是您将看到的最好的代码。。。为了好玩,我试着在C#windows窗体上制作计算器,我在减法和除法运算上遇到了困难,但加法和乘法对我来说效果非常好。我决定使用一个列表数组,这样我就可以输入任意数量的数字 减法的错误是当我输入示例5-2时,结果将是-3 至于除法,误差是结果总是1 请告诉我哪里出了问题,如果可能的话,请给出详细的解释,以便我能更多地了解编程。提前谢谢 namespace CalculatorTestForm1 { public partial clas

您好,我还是编程新手,是的,这不是您将看到的最好的代码。。。为了好玩,我试着在C#windows窗体上制作计算器,我在减法和除法运算上遇到了困难,但加法和乘法对我来说效果非常好。我决定使用一个列表数组,这样我就可以输入任意数量的数字

减法的错误是当我输入示例5-2时,结果将是-3

至于除法,误差是结果总是1

请告诉我哪里出了问题,如果可能的话,请给出详细的解释,以便我能更多地了解编程。提前谢谢

namespace CalculatorTestForm1
{
public partial class Form1 : Form
{
    public static List<int> Numlist = new List<int>();
    public static string operation;

    public Form1()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, EventArgs e)
    {
        Button Num = (Button)sender;
        TXTBox.Text += Num.Text;
    }

    private void BPlus_Click(object sender, EventArgs e)
    {
        operation = "add";
        int AddNum = Convert.ToInt32(this.TXTBox.Text);
        Numlist.Add(AddNum);
        TXTBox.Text = "";          
    }

    private void BEquals_Click(object sender, EventArgs e)
    {       
        int AddNum = Convert.ToInt32(this.TXTBox.Text);
        Numlist.Add(AddNum);

        int sum = 0;
        int product = 1;
        int quotient = 1;
        int difference = 0;

        if (operation == "add"){
            foreach (int value in Numlist)
            {
                sum += value;
            }
            string Answer = sum.ToString();
            TXTBox.Text = Answer;    
        }else if(operation == "minus"){
            foreach (int value in Numlist)
            {
                difference = value - difference;
            }
            string Answer = difference.ToString();
            TXTBox.Text = Answer;
        }
        else if (operation == "multiply")
        {
            foreach (int value in Numlist)
            {
                product *= value;
            }
            string Answer = product.ToString();
            TXTBox.Text = Answer;
        }
        else if (operation == "divide")
        {
            foreach (int value in Numlist)
            {
                quotient = value / value;
            }
            string Answer = quotient.ToString();
            TXTBox.Text = Answer;
        }
        Numlist.Clear();
    }

    private void BClear_Click(object sender, EventArgs e)
    {
        TXTBox.Text = "";
        Numlist.Clear();
    }

    private void BMinus_Click(object sender, EventArgs e)
    {
        operation = "minus";
        int AddNum = Convert.ToInt32(this.TXTBox.Text);
        Numlist.Add(AddNum);
        TXTBox.Text = "";         
    }

    private void BDivide_Click(object sender, EventArgs e)
    {
        operation = "divide";
        int AddNum = Convert.ToInt32(this.TXTBox.Text);
        Numlist.Add(AddNum);
        TXTBox.Text = "";  
    }

    private void BMulti_Click(object sender, EventArgs e)
    {
        operation = "multiply";
        int AddNum = Convert.ToInt32(this.TXTBox.Text);
        Numlist.Add(AddNum);
        TXTBox.Text = "";         
    }
  }
}
namespace CalculatorTestForm1
{
公共部分类Form1:Form
{
public static List Numlist=new List();
公共静态字符串操作;
公共表格1()
{
初始化组件();
}
私有无效按钮\u单击(对象发送者,事件参数e)
{
按钮编号=(按钮)发送器;
TXTBox.Text+=Num.Text;
}
私有void BPlus\u单击(对象发送方,事件参数e)
{
操作=“添加”;
int AddNum=Convert.ToInt32(this.TXTBox.Text);
Numlist.Add(AddNum);
TXTBox.Text=“”;
}
私有void BEquals\u单击(对象发送方,事件参数e)
{       
int AddNum=Convert.ToInt32(this.TXTBox.Text);
Numlist.Add(AddNum);
整数和=0;
int乘积=1;
整数商=1;
int差=0;
如果(操作==“添加”){
foreach(Numlist中的int值)
{
总和+=数值;
}
字符串应答=sum.ToString();
Text=答案;
}else if(操作==“减”){
foreach(Numlist中的int值)
{
差异=值-差异;
}
字符串应答=差分.ToString();
Text=答案;
}
else if(操作==“乘法”)
{
foreach(Numlist中的int值)
{
产品*=价值;
}
字符串应答=product.ToString();
Text=答案;
}
else if(操作==“除法”)
{
foreach(Numlist中的int值)
{
商=值/值;
}
字符串答案=商.ToString();
Text=答案;
}
Numlist.Clear();
}
私有void b清除单击(对象发送者,事件参数e)
{
TXTBox.Text=“”;
Numlist.Clear();
}
私有void BMinus\u单击(对象发送方,事件参数e)
{
操作=“减”;
int AddNum=Convert.ToInt32(this.TXTBox.Text);
Numlist.Add(AddNum);
TXTBox.Text=“”;
}
私有void BDivide_单击(对象发送方,事件参数e)
{
操作=“划分”;
int AddNum=Convert.ToInt32(this.TXTBox.Text);
Numlist.Add(AddNum);
TXTBox.Text=“”;
}
私有void b多点单击(对象发送方,事件参数e)
{
操作=“乘法”;
int AddNum=Convert.ToInt32(this.TXTBox.Text);
Numlist.Add(AddNum);
TXTBox.Text=“”;
}
}
}

对于部门来说,很明显:

quotient = value / value;
/
将始终为
1

在那个循环的某个地方一定有商

对于减法,问题是因为你的方法,数字的顺序是颠倒的

比方说5-2:

foreach (int value in Numlist)
{
    difference = value - difference;
}
NumList={5,2}

第1次迭代:
差异=值(5)-差异(0)=5

第二次迭代:
差异=值(2)-差异(5)=-3

您应该颠倒循环的顺序:
NumList.reverse()

以及该司:

分部:

减法:


对于部门而言,这是显而易见的:

quotient = value / value;
/
将始终为
1

在那个循环的某个地方一定有商

对于减法,问题是因为你的方法,数字的顺序是颠倒的

比方说5-2:

foreach (int value in Numlist)
{
    difference = value - difference;
}
NumList={5,2}

第1次迭代:
差异=值(5)-差异(0)=5

第二次迭代:
差异=值(2)-差异(5)=-3

您应该颠倒循环的顺序:
NumList.reverse()

以及该司:

分部:

减法:


通过阅读源代码,除法的问题很明显:
quotient=value/value除法的问题在阅读源代码时很明显:
商=值/值哇!非常感谢你!我从来不知道您可以在代码中实际执行Numlist.Reverse()。再次非常感谢,别指望会有一个很棒的编程社区。哇!非常感谢你!我从来不知道您可以在代码中实际执行Numlist.Reverse()。再次非常感谢,别指望会有一个伟大的编程社区。