我有一个我想要了解的程序,但是有一些我不理解的缩写代码或代码。 代码是
double xDistance = x1 - x2 >= 0 ? x1 - x2 : x2 - x1;
double yDistance = y1 - y2 >= 0 ? y1 - y2 : y2 - y1;
我在编程书中读到了?:是if ... then的缩写形式但是我把这些单词放在哪里因为每次插入或替换某些代码时我都会遇到语法错误。
还有多种方法可以编写以下代码行
(xDistance <= (w1 + w2) / 2 && yDistance <= (h1 + h2) / 2)
最好更换&amp;&amp;操作
提前感谢所提供的任何帮助。
答案 0 :(得分:5)
条件运算符 ? :
是if-else
的简写,其工作原理如下:
(condition) ? (return this if condition true) : (return this if condition false)
因此
double xDistance = x1 - x2 >= 0 ? x1 - x2 : x2 - x1;
等同于:
if (x1 - x2 >= 0)
xDistance = x1 - x2;
else
xDistance = x2 - x1;
第二行:
double yDistance = y1 - y2 >= 0 ? y1 - y2 : y2 - y1;
是相同的,等同于:
if (y1 - y2 >= 0)
yDistance = y1 - y2;
else
yDistance = y2 - y1;
这是在xDistance
和yDistance
中存储绝对值(即距离而非位移)。也可以替换为Math.abs(x1 - x2)
等。
为什么要替换以下的&&
运算符?
(xDistance <= (w1 + w2) / 2 && yDistance <= (h1 + h2) / 2)
如果您真的不得不这样做(假设此声明属于 if
声明):
if (xDistance <= (w1 + w2) / 2)
if (yDistance <= (h1 + h2) / 2)
// do something
编辑:正如David在评论中提到的那样,&&
只是一个逻辑 AND。即。对于X && Y
,如果X
为TRUE且Y
为TRUE,则表达式为TRUE。
因此你可以利用短路,如果第一个条件(X
)为FALSE,那么程序中没有任何一点可以评估第二个条件({ {1}})因为表达式永远不会为TRUE。