![](/img/trans.png)
[英]Why does a nested if-statement work, but the "&&" operator doesn't? (letter counting script)
[英]or in if-statement doesn't work
我尝试了以下操作,如果输入的数字不是1、2或3,我想得到一条消息:
Console.WriteLine("which number?");
int number = Convert.ToInt32(Console.ReadLine());
if (number != 1 || number != 2 || number != 3)
{
Console.WriteLine("wrong number!");
}
但是如果我的输入是1,2或3,我也会收到消息,但是为什么呢? 怎么了 ? :/ Visual Studio没有错误。
您应该在该if语句中使用AND
运算符
if (number != 1 && number != 2 && number != 3)
{
Console.WriteLine("wrong number!");
}
或者在这种情况下,您可以使用
if (number <= 0 || number >= 4)
{
Console.WriteLine("wrong number!");
}
您应该考虑使用&&运算符,该运算符将检查至少一个不属于其中一个的数字
if (number != 1 && number != 2 && number != 3)
{
Console.WriteLine("wrong number!");
}
TL; DR : 使用&&
运算符检查所有三个,而不仅仅是检查三个。
您目前正在检查:如果该号码是不是没有一个 ,或者不是两个 ,或不是三个 ,然后说“打错了”。
if (number != 1 || number != 2 || number != 3)
以number = 1
为例。 该代码将首先检查number != 1
,然后返回false。 但是,由于您使用的是OR语句,它将检查下一个。 最终发生的事情是这样的:
if (false || true || true)
由于您使用OR,看到C#检查是否有这些都是true
。 因此,这进一步简化为以下内容:
if (true)
由于一个数字不能同时为!=1
, !=2
和!=3
,因此它始终至少具有两个true
。 因此,如果使用OR运算符,则表达式将始终返回true
您想要的是&&
运算符。
//if number is NOT 1 AND NOT 2 AND NOT 3
if (number != 1 && number != 2 && number != 3)
在上面的示例中,这可以简化为:
if (false && true && true)
更进一步:
if (false)
//wrong number
这将跳过内部,因为1 是正确的数字 。 如果1、2和3是错误的数字 ,只需在整个块之前放置一个感叹号,如下所示:
if (!(number != 1 && number != 2 && number != 3))
如果我看看你的代码
Console.WriteLine("which number?");
int number = Convert.ToInt32(Console.ReadLine());
if (number != 1 || number != 2 || number != 3)
{
Console.WriteLine("wrong number!");
}
假设现在if (1 != 1 || 1 != 2 || 1 != 3)
数字等于1, if (1 != 1 || 1 != 2 || 1 != 3)
使用if ( false || true || true )
将使用Truth表给出以下内容: if (true)
有关真值表的更多信息,您可以访问http://kias.dyndns.org/comath/21.html,但总之使用笔触
真实|| 真=真
真实|| 假=真
假|| 真=真
假|| 假=假
但是,如果您考虑使用&号,则true && true = true
真&&假=假
假&&假=假
这就是为什么您总是要进入Console.WriteLine("wrong number!");
因为如果您输入1,2,3,您将获得至少2个“真”值,因此您可以选择许多选项
1) if (number != 1 || number != 2 || number != 3)
变为if (number != 1 && number != 2 && number != 3)
2)为有效值int[] valid = new int[] {1,2,3}
]创建一个数组int[] valid = new int[] {1,2,3}
然后使用for循环或简单的Linq方法Contains(...)测试输入是否在有效数组内
Console.WriteLine("which number?");
int number = Convert.ToInt32(Console.ReadLine());
if (!valid.Contains(number))
{
Console.WriteLine("wrong number!");
}
注意我在有效(!)前面添加了一个Not运算符,这意味着如果有效不包含该值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.