0

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

2 回答 2

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);
于 2013-04-22T12:00:23.310 回答
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() 中的工作就像在任何其他计算中一样,因此您必须注意运算符的优先级,尽管在 if 语句中需要它们并不常见。但是...有时它们是,尤其是 && 之间的优先级,!和 || 需要注意

于 2013-04-22T15:44:33.497 回答