c#计算器减去不正常

时间:2015-03-09 11:14:47

标签: c#

我必须为学校制作一个计算器,除了减号按钮之外一切正常:例如5-5 = -5。 我知道问题存在于我的案例的某个地方"减去"但我只是 无法理解...... 这是代码。 大多数变量都是荷兰语,我希望这不是一个问题!

注意:执行此操作时存在此问题:5 - 5,因此不使用等号按钮。

    private int totaal = 0;
    private Boolean lastClicked, equalsPressed, tussen = false;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void button_Click(object sender, EventArgs e)
    {
        switch(((Button)sender).Name){
            case "one":
                if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "1";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "1";
                }
            break;

            case "two":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "2";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "2";
                }
            break;

            case "three":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "3";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "3";
                }
            break;

            case "four":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "4";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "4";
                }
            break;

            case "five":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "5";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "5";
                }
            break;

            case "six":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "6";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "6";
                }
            break;

            case "seven":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "7";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "7";
                }
            break;

            case "eight":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "8";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "8";
                }
            break;

            case "nine":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "9";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "9";
                }
            break;

            case "zero":
            if (tussen)
                {
                    uitkomstBox.Text = "";
                    tussen = false;
                }

                if (equalsPressed)
                {
                    uitkomstBox.Text = uitkomstBox.Text + "0";
                    equalsPressed = false;
                }
                else
                {
                    uitkomstBox.Text = uitkomstBox.Text + "0";
                }
            break;

            case "plus":
            totaal = totaal + Convert.ToInt32(uitkomstBox.Text);
            uitkomstBox.Text = totaal.ToString();
            tussen = true;
            lastClicked = true;
            break;

            case "minus":
            totaal = totaal - Convert.ToInt32(uitkomstBox.Text);
            uitkomstBox.Text = totaal.ToString();
            tussen = true;
            lastClicked = false;
            break;

            case "clear":
            uitkomstBox.Text = "";
            totaal = 0;
            break;

            case "equals":
            if (lastClicked)
            {
                uitkomstBox.Text = (totaal + Convert.ToInt32(uitkomstBox.Text)).ToString();
            }
            else
            {
                uitkomstBox.Text = (Convert.ToInt32(uitkomstBox.Text) - totaal).ToString();
            }
            equalsPressed = true;
            totaal = 0;
            break;
        }
    }
}

}

4 个答案:

答案 0 :(得分:2)

问题是你要两次减去这个数字。进入switch语句,然后再次进入:

if (lastClicked)
{
    uitkomstBox.Text = (totaal + Convert.ToInt32(uitkomstBox.Text)).ToString();
}
else
{
    // You have already subtracted the number but then you are subtracting it again!
    uitkomstBox.Text = (Convert.ToInt32(uitkomstBox.Text) - totaal).ToString();
}

答案 1 :(得分:0)

看起来你要从totaal两次减去。你确定添加正常吗?检查" ="的代码按钮。

答案 2 :(得分:0)

另外,也许可以考虑在某些计数器int(或任何其他数字类型,如果你打算允许分数)中存储计算数字,而不是在文本框中,因为那时你必须来回转换它只是为了计算

答案 3 :(得分:0)

这是你需要检查的加号和减号按钮的逻辑。

逐步完成代码。

一开始,totaal = 0且uitkomnstBox.Text为空。然后单击“5”。所以uitkomstBox.Text是“5”。然后单击“减号”按钮。 totaal现在更改为-5。即在您输入一个数字以从中减去之前。然后再次单击“5”(完成5 - 5),但在这种情况下totaal不会更改,直到您单击等于按钮,此时它会触及我所不知道的lastClicked逻辑真的得到......(我认为它应该在此之后结束为零,但如果你不点击“等于”,你说问题就存在了。)

所以这不仅仅是你减去两次,而是在减去你的数字之前减去。

作为一种可能的解决方案,我建议的是这样的:在下一个数字完成后执行操作的逻辑(“加”或“减”)。

即。当有人点击“减号”时将其保存在内存中,直到他们完成输入下一个数字,然后从总数中减去它,或者如果他们点击“加”则添加它。对于第一个数字,处理“加”(例如,处理5 - 5就像输入为+ 5 - 5)

private char operation = '+'; // Default first operation to "plus"

// Your other code... 
// ...
// ...

case "plus" :
   if (operation == '+') {
      totaal += Convert.ToInt32(uitkomnstBox.Text);
   }
   if (operation == '-') {
      totaal -= Convert.ToInt32(uitkomnstBox.Text);
   }
   operation = '+';
   // anything else you want
   break;

case "minus" :
   if (operation == '+') {
      totaal += Convert.ToInt32(uitkomnstBox.Text);
   }
   if (operation == '-') {
      totaal -= Convert.ToInt32(uitkomnstBox.Text);
   }
   operation = '-';
   // anything else you want
   break;

case "equals" :
   if (operation == '+') {
      totaal += Convert.ToInt32(uitkomnstBox.Text);
   }
   if (operation == '-') {
      totaal -= Convert.ToInt32(uitkomnstBox.Text);
   }
   operation = '+';   // Set back to default for next calculation

   // anything else you want
   break;