2013-04-22 67 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

我不知道Processing處理支持你所建議的第二種語法。我想我可能誤解了我正在閱讀的這本書,我會再次檢查它。另外,我犯的錯誤是:「&& posEy + wEy> myPlats [i] yPos」。我忘了在myPlats [i](。)yPos之後加上這個點。謝謝! – Alvarop 2013-04-22 12:05:16

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,雖然這是不常見的,他們內部的if語句需要。但是......有時它們,尤其是& &之間的優先順序!和||都需要注意