gpt4 book ai didi

c# - && 运算符的行为类似于 ||运算符(operator)

转载 作者:IT王子 更新时间:2023-10-29 04:13:15 26 4
gpt4 key购买 nike

我是初学者,我一直在尝试运行一个程序来打印从 1 到 N(用户输入)的所有数字,但同时可以被 3 和 7 整除的数字除外。然而,我的代码所做的是它打印从 1 到 N 的数字,除了那些可以被 3 或 7 整除的数字。我检查了一段时间,我不知道它为什么这样做。请向我解释我要去哪里错了。

static void Main(string[] args)
{
int n = 0;
int a = 0;
n = Convert.ToInt32(Console.ReadLine());
while (a <= n)
{
a++;
if (a % 3 != 0 && a % 7 != 0)
{
Console.WriteLine(a);
}
}
Console.ReadKey();
}

当我将 if 语句的符号反转为 == 时,&& 运算符正常工作,但如果符号为 != 它只是像一个 || 运算符,这让我更加困惑。问题很可能出现在条件中,但我看不出它有什么问题。

最佳答案

“除了能同时被3和7整除的数”可以分割如下:

“同时被3和7整除”可以表示为:

“(能被3整除和能被7整除)”

"Except"可以表示为"Not"

所以你得到:

不可(能被 3 整除和能被 7 整除)

“被 3 整除”是 (a % 3) == 0

“被 7 整除”是 (a % 7) == 0

给予:

不是 ( (a % 3) == 0 and (a % 7) == 0)

在 C# 中,Not 变为 !and 变为 &&,因此您可以在 C# 中编写整个内容作为:

if (!((a % 3) == 0 && (a % 7) == 0))


与你的错误比较:

if (a % 3 != 0 && a % 7 != 0)

后者是不正确的,因为它意味着:

if(数字不能被 3 整除)和(数字不能被 7 整除)。

即这意味着 “如果数字既不能被 3 整除也不能被 7 整除,则打印该数字”,这意味着 “如果它能被 3 或 7 整除,则不要打印该数字” .

要了解原因,首先考虑数字 6:

6 is not divisible by 3? = false (because 6 *is* divisible by 3)
6 is not divisible by 7? = true (because 6 is *not* divisible by 7)

所以这解析为 if false and true 这当然是 false

此结果也适用于任何其他可被 3 整除的数字,因此不会打印可被 3 整除的数字。

现在考虑数字 14:

14 is not divisible by 3? = true (because 14 is *not* divisible by 3)
14 is not divisible by 7? = false (because 14 *is* divisible by 7)

所以这解析为 if true and false 这当然是 false

此结果也适用于任何其他可被 7 整除的数字,因此不会打印可被 7 整除的数字。

希望你现在能明白为什么它是错的。如果不是,请考虑这个等效示例:


假设我们有四个人,木匠汤姆、木匠迪克、屠夫哈利和屠夫汤姆。

这个问题等同于您要问的问题:

 Name every person who is (not called Tom and is not a Butcher)

你应该能够看到这与询问相同:

Name every person except (anyone called Tom or anyone who is a Butcher)

在这两种情况下,答案都是木匠迪克。

你应该问的问题是:

Name every person except (anyone called Tom who is also a butcher)

答案是木匠汤姆、木匠迪克和屠夫哈利。


脚注:De Morgan's laws

第二定律指出:

"not (A or B)" is the same as "(not A) and (not B)"

这相当于我上面的示例,其中:

Name every person except (anyone called Tom or anyone who is a Butcher)

相当于:

Name every person who is (not called Tom and is not a Butcher)

其中 A 是任何叫 Tom 的人,B 是任何一个屠夫not 写成 except.

关于c# - && 运算符的行为类似于 ||运算符(operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32499375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com