2011-04-22 53 views
2

我正在從斯坦福大學的iTunes U講座(仍然很漂亮的綠色)開始工作,並且遇到了咆哮。我試圖爲不同的彩色磚塊設定一個點值,這樣我就可以計算出一個分數,但是我的if似乎不起作用。我有一種感覺,getColor()沒有返回我認爲它的值;我創建了一個狀態標籤來顯示它返回的內容,但我仍然無法弄清楚如何測試。這很可能是我錯過了一些簡單的事情,或者還不知道。測試顏色是否等於

這裏是該片的片段我工作:

if (collider != null && collider != paddle) { 
     remove(scoreLabel); 
     vy = -vy; 
     Color brickColor = collider.getColor(); 
     add(new GLabel("" + collider.getColor(), 10, 12)); 
     double temp = brickVal(brickColor) * scoreMultiplier; 
     score += Math.abs(temp); 
     addScoreboard(); 
     remove(collider); 
    } 
} 

private double brickVal(Color c) { 
    if (c.equals(Color.RED)) { 
     return 10.0; 
    } else if (c == Color.ORANGE) { 
     return brickVal = 8.0; 
    } else if (c == Color.YELLOW) { 
     return brickVal = 6.0; 
    } else if (c == Color.GREEN) { 
     return brickVal = 4.0; 
    } else if (Color.CYAN.equals(c)) { 
     return brickVal = 2.0; 
    } else if (c == Color.MAGENTA) { 
     return brickVal = 1.0; 
    } else { 
     return 1.0; 
    } 
} 

如果您需要完整的代碼,讓我知道。

回答

6

如果您的情況與c == Color.X類似,請使用Color.X.equals(c)。您正在測試對象是否是相同的實例,而不是如果它們被認爲是彼此相等的。

你也可以使用c.equals(Color.X)像你這樣爲Color.RED,但很多人喜歡的另一種方式,以防止一個NullPointerException對於其中cnull情況。

+0

謝謝。我還發現我的問題的一部分是我的scoreMultiplier是0. * facepalm * – 2011-04-23 00:32:14

+0

並且使用==作爲比較是合法的,因爲所有顏色定義都是靜態的。對象沒有區別。等號方法只是比較顏色的RGB內容,但應該可以工作。 – Vetsin 2011-04-23 00:35:46

+0

只要被比較的Color對象與相同的靜態實例相反,只要'=='可以。然而,如果被比較的「顏色」對象來自其他地方,那麼這將是一個問題。可能在這種情況下,你是對的,沒關係。這聽起來像乘以0可能是一個更大的問題:) – WhiteFang34 2011-04-23 00:40:48