【问题标题】:Testing Values For Multiple Conditions in C#在 C# 中测试多个条件的值
【发布时间】:2014-03-14 05:36:30
【问题描述】:

我很难找出我的代码有什么问题。我正在尝试在 C# 中创建一个控制台应用程序。该程序应该要求用户输入 3 个数字。所有的数字都必须大于 0。第一个数字应该是偶数,第二个应该是整数,第三个应该是奇数。我的语法似乎是正确的,但是,当我运行程序时,它似乎忽略了 if (userInput > 0) 部分。这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        try
        {
            int userInput;
            Console.WriteLine("Please enter an even number.");
            userInput = Convert.ToInt32(Console.ReadLine());
            if (userInput > 0 && !isEven(userInput))
                return;
            Console.WriteLine("Please enter a whole number.");
            userInput = Convert.ToInt32(Console.ReadLine());
            if (userInput > 0)
            Console.WriteLine("Please enter an odd number.");
            userInput = Convert.ToInt32(Console.ReadLine());
            if (userInput > 0 && isEven(userInput))
                return;
            Console.WriteLine("Congratulations!");
            Console.WriteLine("Press any key to continue.");
            Console.ReadKey();
        }
        catch { }
    }

    static bool isEven(int value)
    {
        if (value % 2 == 0)
            return true;
        else
            return false;
    }       
}

如果有人能告诉我如何正确测试这两种情况,我将永远感激不尽。谢谢。

【问题讨论】:

  • 移除空的 catch 块。它只会隐藏有用的信息,您可以使用这些信息来找出程序崩溃的原因。
  • 哦,好吧。谢谢你提供的信息。我通过删除空的 catch 块修改了我的代码,但我仍然遇到相同的逻辑错误。当我测试程序时,我为第一个提示输入了一个偶数。我还将该数字设为-2,以测试是否正确测试了大于 0 的条件。无论出于何种原因,它仍然被忽略。
  • 有空捕获不是问题的原因。删除它并不能修复您的代码,它只是一种良好的编程习惯,可以防止您忽略其他问题。
  • 我明白了。谢谢你的解释。我目前正在读计算机编程专业的第一年,所以我当然可以谦虚地说我还有很多东西要学。

标签: c# if-statement multiple-conditions


【解决方案1】:

您对输入的第一个数字的要求基本上是:

数字必须是正数和偶数。

反之亦然:

如果数字不是正数,OR不是偶数,那么它是无效的。

你的支票上写着

如果数字是正数并且是奇数,则拒绝它

表示任何为零、负数或偶数有效的数字。

我们这里有一个德摩根定律的应用。它指出:

!(A && B)

等价于

!A || !B

所以如果一个有效数是偶数AND正数,那么一个无效数偶数不是OR不是正数(非正数小于等于零)。

【讨论】:

    【解决方案2】:

    问题:您正在使用逻辑与检查一个有效场景和其他无效场景。

    解决方案:您需要使用逻辑 OR 的两种无效方案。

    如果违反以下任何一项规则,则不应继续执行您的需求程序:

    a. 用户输入应该是 > 0
    b. 用户输入应该是奇数、整数和偶数

    1. 替换这个:

    if (userInput > 0 && !isEven(userInput))
    

    有了这个:

    if (userInput <= 0 || !isEven(userInput))
    

    2. 替换这个:

    if (userInput > 0 && isEven(userInput))
    

    有了这个:

    if (userInput <= 0 || isEven(userInput))
    

    【讨论】:

    • 非常感谢!我知道我哪里出错了,我会在以后的所有实例中使用你们所有人向我展示的内容。这很有帮助!
    • @user3311305:不客气 :) 很高兴为您提供帮助。
    【解决方案3】:

    根据您构建程序的方式,在第二个 if, IE 之后可能应该有一个 return 语句:

    if (userInput > 0)
        return;
    

    但是,这仍然不能解决您可能想说的是:

    if (userInput <= 0)
        return;
    

    或者更直接地从英文翻译:

    if (!(userInput > 0))
        return;
    

    正如其他人所提到的,这种符号变化也适用于您的其他 if 语句。

    【讨论】:

      【解决方案4】:

      检查

      if (userInput <= 0 || !isEven(userInput))
          return;
      

      因为你想在数字不是正数或数字不是偶数时退出。


      德摩根定律告诉您如何反转逻辑表达式。您可以通过将每个术语替换为它的否定术语并将 AND 替换为 OR 来实现,反之亦然。

      所以你也可以写

      if (userInput > 0 && isEven(userInput)) {
          // The user input is ok, continue
      } else {
          return;
      }
      

      userInput &lt;= 0userInput &gt; 0 的否定。

      德摩根定律

      NOT(A AND B) = NOT(A) OR NOT(B)
      

      NOT(A OR B) = NOT(A) AND NOT(B)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-02
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 2013-12-19
        • 1970-01-01
        相关资源
        最近更新 更多