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)
这老栗子......
在比较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- 我将把实现作为练习留给您.