Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# != 操作员工作不正常_C# - Fatal编程技术网

C# != 操作员工作不正常

C# != 操作员工作不正常,c#,C#,我目前正试图让我的蛇控制台游戏运行,但我已经想出了一些我不太明白。我真的不认为操作员工作不正常,所以我一定犯了一个错误,但我不知道为什么会这样: // not working if (food.x != snakeElements.Last().x && food.y != snakeElements.Last().y) // working if (!(food.x == snakeElements.Last().x && food.y == sna

我目前正试图让我的蛇控制台游戏运行,但我已经想出了一些我不太明白。我真的不认为操作员工作不正常,所以我一定犯了一个错误,但我不知道为什么会这样:

 // not working
 if (food.x != snakeElements.Last().x && food.y != snakeElements.Last().y) 

 // working
 if (!(food.x == snakeElements.Last().x && food.y == snakeElements.Last().y)) 
不是都一样吗?

使用!a&&!b是一样的!所以你的第一个例子应该是:

if (food.x != snakeElements.Last().x || food.y != snakeElements.Last().y)
使用!a&&!b是一样的!所以你的第一个例子应该是:

if (food.x != snakeElements.Last().x || food.y != snakeElements.Last().y)

我认为布尔逻辑在两种情况下是不同的:

两个比较必须不相等,if才能计算为true。 如果要计算为true,则其中任何一个都必须不相等
我认为布尔逻辑在两种情况下是不同的:

两个比较必须不相等,if才能计算为true。 如果要计算为true,则其中任何一个都必须不相等
&&应该在第一个if中为| |

if (food.x != snakeElements.Last().x || food.y != snakeElements.Last().y) 

&&应该在第一个if中为| |

if (food.x != snakeElements.Last().x || food.y != snakeElements.Last().y) 
不,不一样

如果这有效的话

if (!(food.x == snakeElements.Last().x && food.y == snakeElements.Last().y)) // working
那么这也应该有效

if (food.x != snakeElements.Last().x || food.y != snakeElements.Last().y) // should work
请注意符号从逻辑AND&&更改为逻辑OR | | |。

否,它是不同的

如果这有效的话

if (!(food.x == snakeElements.Last().x && food.y == snakeElements.Last().y)) // working
那么这也应该有效

if (food.x != snakeElements.Last().x || food.y != snakeElements.Last().y) // should work

注意符号从逻辑AND&&到逻辑OR | |的变化。

如果您写出布尔条件的实际含义,您可以更清楚地看到区别

// not working
if (food.x != snakeElements.Last().x && food.y != snakeElements.Last().y) 
这意味着:

食物与最后一个snake元素不在同一列中,并且食物与最后一个snake元素不在同一行中

逻辑错误现在更加明显了。如果食物的位置是10,3,最后一个元素的位置是14,3怎么办

与之相比:

// working
if (!(food.x == snakeElements.Last().x && food.y == snakeElements.Last().y)) 
这意味着:

食物与最后一个snake元素在同一行,食物与最后一个snake元素在同一列,这是不正确的


现在,当且仅当食物的X和Y与最后一个snake元素相同时,条件才为false。

如果你写出布尔条件的实际含义,你就能更清楚地看到区别所在

// not working
if (food.x != snakeElements.Last().x && food.y != snakeElements.Last().y) 
这意味着:

食物与最后一个snake元素不在同一列中,并且食物与最后一个snake元素不在同一行中

逻辑错误现在更加明显了。如果食物的位置是10,3,最后一个元素的位置是14,3怎么办

与之相比:

// working
if (!(food.x == snakeElements.Last().x && food.y == snakeElements.Last().y)) 
这意味着:

食物与最后一个snake元素在同一行,食物与最后一个snake元素在同一列,这是不正确的

现在,当且仅当食物的X和Y与最后一个蛇元素相同时,条件才为假。

它们是不同的

为了清楚起见,我将把food.x称为x,把snakelements.Last.x称为x,其他称为Y和Y

第一种说法是:

如果X不同于X'且Y不同于Y',则为真

第二种说法是:

如果X等于X'且Y等于Y',则为false

假设X,X',Y,Y'是整数

如果我们说X=3,X'=5,Y=1,Y'=4,第一个语句是真的,因为X!=X'Y!=都是真的。然而,第二个也是正确的,因为X不等于X。

它们是不同的

为了清楚起见,我将把food.x称为x,把snakelements.Last.x称为x,其他称为Y和Y

第一种说法是:

如果X不同于X'且Y不同于Y',则为真

第二种说法是:

如果X等于X'且Y等于Y',则为false

假设X,X',Y,Y'是整数


如果我们说X=3,X'=5,Y=1,Y'=4,第一个语句是真的,因为X!=X'Y!=都是真的。然而,第二个也是正确的,因为X不等于X。

您不是在比较浮动吗?另外,请注意,这两种情况是不同的,而这两种情况并不相同!看,你不能这样移动否定。x或y是自定义对象吗?不,结构包含两个整数x和y,不是都一样吗不,你不是在比较浮动吗?另外,请注意,这两种情况是不同的,而这两种情况并不相同!看,你不能这样移动否定。x或y是自定义对象吗?不,结构包含两个整数x和y,不是都一样吗不。@Blorgbeard:虽然这是事实,但这仍然是正确的道路。链接和演示非常有用。更不用说我们不知道哪一个是真正的目标,因为OP认为它们是等效的。@Blorgbeard-是的,你是对的,谢谢。我已经更新了答案。@Magus我们知道,因为他说//not working and//working@Blorgbeard当前位置你是对的,但我仍然认为值得他仔细测试他的逻辑,因为这两种逻辑非常不同。当这样一个重要的逻辑问题出现时,确保你的先入之见没有错是很重要的。@Blorgbeard:虽然这是事实,但这仍然是正确的道路。链接和演示非常有用。更不用说我们不知道哪个才是真正的目标,因为
OP认为他们是对等的。@Blorgbeard-是的,你是对的,谢谢。我已经更新了答案。@Magus我们知道,因为他说//not working and//working@Blorgbeard当前位置你是对的,但我仍然认为值得他仔细测试他的逻辑,因为这两种逻辑非常不同。当这样一个重要的逻辑问题出现时,确保你的先入之见没有错是很重要的。