首页 > 解决方案 > C# Calculator 在某些操作中使用 List Array 错误 Windows 窗体应用程序

问题描述

您好,我还是编程新手,是的,这不是您将看到的最好的代码...我尝试在 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 = "";         
    }
  }
}

标签: c#calculator

解决方案


对于划分,很明显:

quotient = value / value;

value/value将永远是1

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

对于减法,问题在于由于您执行减法的方式,数字的顺序是相反的。

让我们说 5 - 2:

foreach (int value in Numlist)
{
    difference = value - difference;
}

NumList = {5,2}

第一次迭代: difference = value(5) - difference(0) = 5

第二次迭代: difference = value(2) - difference(5) = -3

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

对于部门也是如此:

分配:

foreach (int value in Numlist.Reverse())
{
    quotient = value / quotient;
}

减法:

foreach (int value in Numlist)
{
    difference = value - difference;
}

推荐阅读