2013-04-22 2 views
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); 

ответ

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); 
+0

Я не знал, что обработка поддерживает второй тип синтаксиса, который вы предложили. Я думаю, что, возможно, неправильно понял книгу, которую я читаю, я проверю ее снова. Кроме того, ошибка, которую я сделал, заключается в этой строке: «&& posEy + wEy> myPlats [i] yPos». Я забыл добавить точку после myPlats [i] (.) YPos. Благодаря! – Alvarop

0

Другое дело, что мне делать, чтобы сохранить код проще, чтобы иметь некоторую внутреннюю переменную, представляющую временно расчеты должны быть проверены, последний, если, например, вы хотите добавить маржу в тестовой зоне это может быть легко сделано в только одно место, как:

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); 

О скобке они работают, если() так же, как они работают в любом другом расчете, так что вы должны вспомнить precedence of the operators, хотя это не часто, что они необходимы в случае заявления. Но ... иногда они есть, особенно приоритет между & &,! и || следует обратить внимание

Смежные вопросы