如果句子不起作用则相等或更少

时间:2016-01-22 17:44:02

标签: c# if-statement

所以我做了一个简单的商店来为我正在制作的游戏购买升级版。当我拥有正确或更多数量的cookie时,我可以购买升级并且它确实显示了消息框,但是如果我有更少,它什么都不做。没有消息框或任何东西。

public void button1_Click_1(object sender, EventArgs e) //2CookiesPerClick
    {
        for (MessageBox.Show("Checking..."); cookies > 9;n++)
        {
            if (cookies > 9)
            {
                panel1.Hide();
                cookies -= 10;
                MessageBox.Show("You bought 2 Cookies per Click!");
            }
            if (cookies < 9)
            {
                button1.Show();
                label2.Show();
                MessageBox.Show("You don't have enough cookies to buy this upgrade!");
            }

        }

    }

编辑: 更新了它,感谢Rob和Amadeusz Wieczorek! 更新的代码:

public void button1_Click_1(object sender, EventArgs e)//2CookiesPerClick
    {
            if (cookies >= 10)
            {
                n++;
                panel1.Hide();
                cookies -= 10;
                MessageBox.Show("You bought 2 Cookies per Click!");
            }
            else
            {
                button1.Show();
                label2.Show();
                MessageBox.Show("You don't have enough cookies to buy this upgrade!");
            }

    }

4 个答案:

答案 0 :(得分:2)

你的for循环很奇怪:

for (MessageBox.Show("Checking..."); cookies > 9;n++)

cookies <= 9时未输入此循环。所以永远不会达到你的if声明。

答案 1 :(得分:2)

  • 什么是n?我用attempt替换了它。
    • 我不太明白for循环中的逻辑,所以我可能已经改变了你想要的行为
  • 我将消息框代码移动到循环中
    • 最好不要在for循环条件下执行逻辑。
  • 我将ifif更改为ifelse。这有两个好处:
    • 您不再需要检查第二个条件(cookies&lt; 9)
    • 检查第二个条件时出错 - 当cookies == 9?
    • 时会发生什么
    • 您完全确定只会执行一个分支

最大的好处是让代码更简单,一次做一件事,并且不要重复自己:)希望这会减少你的错误数量。

以下是更新后的代码:

    MessageBox.Show("Checking...");
    for (int attempt = 0; attempt < 10; attempt++)
    {
        cookies++;
        if (cookies >= 10)
        {
            panel1.Hide();
            cookies -= 10;
            MessageBox.Show("You bought 2 Cookies per Click!");
        }
        else
        {
            button1.Show();
            label2.Show();
            MessageBox.Show("You don't have enough cookies to buy this upgrade!");
        }
    }

答案 2 :(得分:0)

您的代码不起作用,因为循环条件表示&#34;仅在Cookie的数量大于9时才循环播放#34;。如果数字小于9或等于9,则永远不会执行循环!

而且,我不清楚你为什么要使用循环。每次点击按钮时,该代码是否应该执行一次?

使用for循环的惯用方法是

const int N = 20;
for (int i = 0; i < N; i++) {
    ...
}

如果没有限制

for (int i = 0; true; i++) {
    ...
}

技术上可以在部分中调用消息框,但非常非常非常罕见!这个地方保留用于循环变量的声明和初始化。更好:在循环之前调用消息框:

MessageBox.Show("Checking...");
for (int cookies = 0; true; cookies++) {
    ...
}

答案 3 :(得分:0)

for循环将继续执行代码,直到不满足条件(实际上,根本不能执行)。由于您的代码处于点击事件中,并且您的消息明确提到“每次点击”,因此我认为for循环无关紧要。

这可能就是你想要做的事情:

public void button1_Click_1(object sender, EventArgs e) //2CookiesPerClick
{
   MessageBox.Show("Checking...")

   if (cookies > 9)
   {
       panel1.Hide();
       cookies -= 10;
       MessageBox.Show("You bought 2 Cookies per Click!");
   }
   if (cookies <= 9)
   {
       button1.Show();
       label2.Show();
       MessageBox.Show("You don't have enough cookies to buy this upgrade!");
   }
}

由于这看起来像是一个家庭作业问题,我建议你将上面的内容与当前的代码进行比较,找出为什么你的代码不起作用。如果你仍然感到困惑,请随时发表评论