2012-09-21 86 views
6

我在AP計算機科學課中使用GridWorld,並且我們正在做的一部分工作是更改錯誤(對象)的顏色。我已經找到了一個非常基本的方法來做到這一點,但我試圖將字符串合併,以允許用戶鍵入他想要的bug的顏色,而不必爲RGB輸入數值。我可以通過鍵入「red」並讓字符串存儲該字符串值來獲得我想要的顏色。但是,如何將該字符串轉換爲顏色?我不太確定我是否足夠清楚地描述了這一點,但是我附上了我的代碼,希望有人能夠理解並能夠提供幫助。設置對象的顏色

Color red = new Color (255, 0, 0); 
Color green = new Color (0, 255, 0); 
Color blue = new Color (0, 0, 255); 

System.out.println("What color would you like the first bug to be? (red, green, blue)"); 
String name = "color1"; 
String color1 = keyboard.next(); 

if (color1 == "red") 
{ 
    world.add (new Location (bugx1, bugy1), new Bug(red)); 
} 
if (color1 == "blue") 
{ 
    world.add (new Location (bugx1, bugy1), new Bug(blue)); 
} 
if (color1 == "green") 
{ 
    world.add (new Location (bugx1, bugy1), new Bug(green)); 
} 

回答

5

這老栗子...

當在Java中比較字符串,則必須使用.equals()==運算符只有在兩個操作數都是相同的精確對象時才爲真。試試這個:

if (color1.equals("red")) 

這是一個共同的「錯誤」,由熟悉JavaScript,在這裏,你已經編寫它==操作員工作的程序員所。恕我直言,這個「錯誤」實際上是在java語言規範中 - 它們應該允許==執行equals()並使用===進行標識比較(實際很少使用)。


要正確地做到這一點,我建議使用enum作爲顏色。那麼你的代碼將只是一條線:

public enum BugColor { 
    red(255, 0, 0), 
    green(0, 255, 0), 
    blue(0, 0, 255); 

    private final Color color; 

    BugColor(int r, int g, int b) { 
     color = new Color(r, g, b); 
    } 

    public Color getColor() { 
     return color; 
    } 
} 

後來乾脆:

String color1 = keyboard.next(); 
world.add (new Location (bugx1, bugy1), new Bug(BugColor.valueOf(color1).getColor())); 

如果Color是一個接口,可以簡化並通過使enum BugColor extends Color提高你的代碼 - 我會將實施作爲練習留給您。

+0

+1使用枚舉,但@OP,枚舉不包括在APCS課程中,所以請準備好讓老師詢問您對它們的使用。 – Vulcan

+0

不知道「枚舉」是什麼,但爲了這些目的.equals()像魅力一樣工作。謝謝! –