设置对象的颜色

Mit*_*ngs 6 java string gridworld

我在我的AP计算机科学课中使用GridWorld,我们正在做的一部分是改变bug(一个对象)的颜色.我找到了一个非常基本的方法来做这个,但我想尝试合并字符串,以允许用户输入他想要的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));
}
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 5

这老栗子......

在比较java中的Strings时,必须使用.equals().==仅当两个操作数都是完全相同的对象时,运算符才为真.试试这个:

if (color1.equals("red"))
Run Code Online (Sandbox Code Playgroud)

这是熟悉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;
    }
}
Run Code Online (Sandbox Code Playgroud)

那简单地说:

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

如果Color是一个界面,您可以通过以下方式简化和改进您的代码enum BugColor extends Color- 我将把实现作为练习留给您.