簡體   English   中英

如果句子不起作用,等於或小於

[英]Equals or less in if sentence doesn't work

因此,我開了一家簡單的商店來購買自己正在制作的游戲的升級版。 當我擁有正確或更多數量的Cookie時,我可以購買升級,並且確實會顯示消息框,但是如果我的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!");
            }

    }

您的for循環很奇怪:

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

cookies <= 9時,不會進入此循環。 因此,您的if語句永遠不會到達。

  • 什么是n 我用attempt代替它。
    • 我不太了解for循環中的邏輯,因此我可能已經更改了您想要的行為
  • 我將消息框代碼移入了循環
    • 最好不要在for循環的條件下執行邏輯。
  • 我將ifif更改為ifelse 這有兩個好處:
    • 您不再需要檢查第二種情況(Cookie <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!");
        }
    }

您的代碼無效,因為循環條件顯示“僅當cookie的數量大於九時才循環”。 如果數字小於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++) {
    ...
}

for循環將一直在其中執行代碼,直到不滿足條件為止(實際上,它永遠不會執行)。 由於您的代碼處於click事件中,並且您的消息中專門提到“每次點擊”,因此在我看來, 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!");
   }
}

由於這看起來像是一個家庭作業問題,因此建議您將上述內容與當前代碼進行比較,以弄清代碼為何無法正常工作。 如果您仍然感到困惑,請隨時發表評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM