这似乎是一个非常简单的问题,但我很困惑。 我有一个if条件,其中有很多条件,我无法弄清楚在这种情况下使用的括号语法。任何人都可以给我一些提示,告诉我如何找出这个或任何其他情况的正确语法,其中if语句中有很多条件?谢谢!
void collisionEn() {
for (int i = 0; i < myPlats.length; i++) {
if (posEx > myPlats[i].xPos)
&& (posEx+wEx > myPlats[i].xPos)
&& (posEx+wEx < myPlats[i].xPos + myPlats[i].platWidth)
&& (posEx < myPlats[i].xPos + myPlats[i].platWidth)
&& (posEy > myPlats[i].yPos)
&& (posEy < myPlats[i].yPos + myPlats[i].platHeight)
&& (posEy+wEy > myPlats[i]yPos)
&& (posEy+wEy < myPlats[i].yPos + myPlats[i].platHeight)
rect(0, 0, 1000, 1000);
答案 0 :(得分:1)
不需要(但允许)每个 条件 周围的括号。你的每个条件周围都有括号,没关系。
但整个条件都需要一组括号 。
if (condition)
所以在你的情况下,在最开头添加一个左括号,在最后添加一个右括号,你就可以得到它。
if ((posEx > myPlats[i].xPos)
&& (posEx+wEx > myPlats[i].xPos)
&& (posEx+wEx < myPlats[i].xPos + myPlats[i].platWidth)
&& (posEx < myPlats[i].xPos + myPlats[i].platWidth)
&& (posEy > myPlats[i].yPos)
&& (posEy < myPlats[i].yPos + myPlats[i].platHeight)
&& (posEy+wEy > myPlats[i]yPos)
&& (posEy+wEy < myPlats[i].yPos + myPlats[i].platHeight))
rect(0, 0, 1000, 1000)
正是因为你有很多括号,我建议你在每个条件下删除可选的,如果你的风格指南允许的话。它们不是必需的,在这种情况下,它们会增加混乱。
if (posEx > myPlats[i].xPos
&& posEx+wEx > myPlats[i].xPos
&& posEx+wEx < myPlats[i].xPos + myPlats[i].platWidth
&& posEx < myPlats[i].xPos + myPlats[i].platWidth
&& posEy > myPlats[i].yPos
&& posEy < myPlats[i].yPos + myPlats[i].platHeight
&& posEy+wEy > myPlats[i]yPos
&& posEy+wEy < myPlats[i].yPos + myPlats[i].platHeight)
rect(0, 0, 1000, 1000);
答案 1 :(得分:0)
我为保持代码更简单而做的另一件事是让一些局部var临时表示要测试的计算,后者如果你想在测试区域添加一个边距,这可以在一个地方轻松完成,像:
float mpX = myPlats[i].xPos;
float mpY = myPlats[i].yPos;
float mpW = mpX + myPlats[i].platWidth;
float mpH = mpY + myPlats[i].platHeight
float pEx = posEx+wEx;
float pEy = posEy+wEy;
if ( posEx > mpX && pEx > mpX
&& pEx < mpW && posEx < mpW
&& posEy > mpY && posEy < mpH
&& pEy > mpY && pEy < mpH)
rect(0, 0, 1000, 1000);
关于括号,它们在if()中工作,就像它们在任何其他计算中一样,所以你必须要记住precedence of the operators,尽管在if语句中需要它们并不常见。但是......有时它们是,尤其是&amp;&amp;,之间的优先级!和||要引起注意