我发现我的代码出了什么问题我遇到了一些困难。我想在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;
}
}
如果有人能告诉我如何正确测试这两个条件,我将永远是伟大的。感谢。
答案 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语句,正如其他人所提到的那样。