【问题标题】:C# While loop with Multiple ||(Or) Statements not working带有多个 ||(Or) 语句的 C# While 循环不起作用
【发布时间】:2020-07-03 16:57:24
【问题描述】:

我有以下 C# 代码

int amount_guesses = 2;
int c_answer = 4;
int u_answer = 0;

Console.WriteLine("Guessing Game");
Console.WriteLine("*Hint:The number is between 1 and 5");
Console.WriteLine("*Hint:You only get 2 guesses");

while (u_answer != c_answer || amount_guesses != 0)
{
    u_answer = Convert.ToInt32(Console.ReadLine());
    amount_guesses = amount_guesses-1;
    if (u_answer == c_answer)
    {
        Console.WriteLine("Well Done that is the Correct Number");
    }
    else
    {
        Console.WriteLine("Wrong Number!Try again.You have {0} trys left", amount_guesses);
    }
}

Console.WriteLine("Press any key to close");
Console.ReadLine();

但是当while语句中的要求不满足时,它并没有跳出循环。
我也试过了

while ((u_answer != c_answer) || (amount_guesses != 0))

但是还是不行,我把逻辑改成这样结束了:

int amount_guesses = 2;
int c_answer = 4;
int u_answer = 0;

Console.WriteLine("Guessing Game");
Console.WriteLine("*Hint:The number is between 1 and 5");
Console.WriteLine("*Hint:You only get 2 guesses");

while (u_answer != c_answer && amount_guesses != 0)
{
    u_answer = Convert.ToInt32(Console.ReadLine());
    amount_guesses = amount_guesses-1;
    if (u_answer == c_answer)
    {
        Console.WriteLine("Well Done that is the Correct Number");
        amount_guesses = 0;
    }
    else
    {
        Console.WriteLine("Wrong Number!Try again.You have {0} trys left", amount_guesses);
    }
}

Console.WriteLine("Press any key to close");
Console.ReadLine();

这很好,但我想知道为什么我在顶部使用|| 的代码不起作用?

【问题讨论】:

  • 在任何语言中“或”(||)和“和”(&&)的区别都是一样的(我希望这个或那个是真的我希望这个和那个是真的)。除此之外,您的标题提到“多个 OR 语句”,但您的正文中只有一个 OR 语句
  • @Rafalon 很抱歉标题上的错字,

标签: c# while-loop or-operator


【解决方案1】:

只要满足其条件,while 循环继续。在您的情况下,只要玩家没有猜到数字并且还有猜测,您就想继续循环。您应该使用&&(逻辑与)条件,而不是||

while (u_answer != c_answer && amount_guesses != 0)
{
    // Here ----------------^

【讨论】:

    【解决方案2】:

    在布尔逻辑中使用否定时,这是一个常见的(ish)问题。 OR 听起来应该是正确的,因为它匹配的是英语的说话方式,但实际上 AND 是你想要的。

    我尝试总是编写条件测试来判断是否相等,所以不是:

    u_answer != c_answer && amount_guesses != 0
    

    你可以写:

    !(u_answer == c_answer || amount_guesses == 0)
    

    这是相同的条件。

    看看De Morgams Law,也比较好记

    断线,换号

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 2015-12-23
      • 1970-01-01
      • 2021-12-02
      • 2014-02-15
      • 2012-12-02
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多