6

我在我的 AP 计算机科学课程中使用 GridWorld,我们正在做的部分工作是更改错误(对象)的颜色。我找到了一种非常基本的方法来做到这一点,但我试图合并字符串以允许用户输入他希望错误的颜色,而不必输入 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));
}
4

1 回答 1

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- 我将把实现作为练习留给您。

于 2012-09-21T02:28:01.117 回答