6

私は AP コンピューター サイエンスのクラスで GridWorld を使用しています。私たちが行っていることの一部は、バグ (オブジェクト) の色を変更することです。これを行うための非常に基本的な方法を見つけましたが、文字列を組み込んで、RGB の数値を入力する代わりに、ユーザーがバグの色を入力できるようにしようとしています。「赤」と入力し、文字列にそれを格納することで、文字列値を希望の色にすることができます。しかし、その文字列を色に変換するにはどうすればよいでしょうか? これを十分に明確に表現したかどうかはよくわかりませんが、コードを添付したので、誰かが理解して助けてくれることを願っています.

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(). この==演算子は、両方のオペランドがまったく同じオブジェクトである場合にのみ true になります。これを試して:

if (color1.equals("red"))

これは、javascript に精通しているプログラマーが行う一般的な「間違い」であり、==オペレーターはコーディングしたとおりに機能します。私見、「間違い」は実際にはJava言語仕様にあります-==実行してID比較equals()に使用することを許可する必要がありました(実際にはほとんど使用されません)。===


これを適切に行うにenumは、色に を使用することをお勧めします。次に、コードは1行になります。

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 に答える