2012-09-21 88 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()像魅力一样工作。谢谢! –