在C#中测试多个条件的值

时间:2014-02-14 18:06:28

标签: c# if-statement multiple-conditions

我发现我的代码出了什么问题我遇到了一些困难。我想在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;
    }       
}

如果有人能告诉我如何正确测试这两个条件,我将永远是伟大的。感谢。

4 个答案:

答案 0 :(得分:3)

您输入的第一个号码的要求基本上是:

  

这个数字必须是正数和偶数。

相反的是:

  

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

你的支票说

  

如果数字为正 AND 则为奇数,则拒绝

表示任何零,负或甚至有效的数字。

我们这里有DeMorgan定律的应用。它声明:

!(A && B)

相当于

!A || !B

因此,如果有效号码甚至 AND 为正数,则无效号码甚至不是 OR 积极的(不是正数小于或等于零)。

答案 1 :(得分:1)

问题:您正在使用逻辑AND检查一个有效和其他无效方案。

解决方案:您需要将两个无效方案与逻辑OR一起使用。

如果以下规则中的任何一个出现中断,则您的需求程序不应继续:

a。 userinput应为> 0
b。 userinput应该是奇数,整数甚至是

1。替换此:

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

有了这个:

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

2。替换此:

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

有了这个:

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

答案 2 :(得分:0)

检查

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

因为当号码不是正数或者数字不是时你想要退出。


De Morgan的定律告诉您如何反转逻辑表达式。你可以用它的否定术语替换每个术语,用OR替换AND,反之亦然。

所以你也可以写

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

userInput <= 0是对userInput > 0的否定。

De Morgan的法律

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

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

答案 3 :(得分:0)

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

if (userInput > 0)
    return;

然而,这仍然没有解决你可能想说的问题:

if (userInput <= 0)
    return;

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

if (!(userInput > 0))
    return;

此标志的更改也适用于您的其他if语句,正如其他人所提到的那样。