处理括号语法

时间:2013-04-22 11:56:26

标签: java syntax syntax-error processing parentheses

这似乎是一个非常简单的问题,但我很困惑。 我有一个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);

2 个答案:

答案 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;,之间的优先级!和||要引起注意