我的一个函数中有这样的东西,它返回false。
if ((X = ax && Y == ay) || (X == bx && Y == ay) || (X == cx && Y == ay) || (X == ax && Y == by) || (X == cx && Y == by) || (X == ax && Y == cy) || (X == bx && Y == cy) || (X == cx && Y == cy))
return true;
else
return false;
但是,如果我使用相同的参数调用该函数,但仅将代码更改为此函数,则返回true。
if (X == bx && Y == ay)
return true;
else
return false;
为什么会这样?第二个代码中的条件是第一个代码中的条件之一,所以如果其中一个条件为真,它应该返回true,我是对的吗?我希望第一个条件返回true
答案 0 :(得分:5)
在长条件开始附近的“=”右边需要是“==”!您正在为X分配一个新值,而不仅仅是测试它,这会导致所有其他测试失败。
答案 1 :(得分:4)
=
是一个赋值运算符,不小心将它用于比较是一个常见的错误,这也是你的情况。在条件的第一部分:(X = ax && Y == ay)
,您可以通过为X
分配ax
来更改if (A || B || C || D)
return true;
else
return false;
的值,然后会影响其余条件的结果。
另请注意:
return (A || B || C || D);
等于:
{{1}}
答案 2 :(得分:3)
if((X = ax && Y == ay) || //Problem is here
你需要成功
if((X == ax && Y == ay) ||
X
= bx
和Y
= ay
的代码失败,与第一种情况相同,值ax
被分配给{{1 },X
,但TRUE
不是Y
,这使得第一个比较为假。之后的所有比较评估为false,导致第一次测试失败。