2012-09-21 27 views
6

Używam GridWorld w mojej klasie Computer Science, a częścią tego, co robimy, jest zmiana koloru błędu (obiektu). Znalazłem bardzo prosty sposób, aby to zrobić, ale próbuję wprowadzić ciągi znaków, aby umożliwić użytkownikowi wpisanie koloru, który chciałby, aby był, zamiast wstawiania wartości liczbowych dla RGB. Jestem w stanie uzyskać wartość ciągu jako kolor, który chcę, wpisując, "czerwony" i mając ten magazyn łańcuchowy. Ale w jaki sposób mogę przekształcić ten ciąg w kolor? Nie jestem pewien, czy napisałem to wystarczająco jasno, ale załączam swój kod, więc mam nadzieję, że ktoś zrozumie i pomoże.Ustawianie koloru obiektu

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)); 
} 

Odpowiedz

5

Ten stary kasztan ...

Podczas porównywania ciągów w języku Java, należy użyć .equals(). Operator == jest prawdziwy tylko wtedy, gdy oba operandy są dokładnie tym samym obiektem. Spróbuj tego:

if (color1.equals("red")) 

Jest to typowy „pomyłka” wykonana przez programistów znających JavaScript, gdzie operator == będzie działać jak masz zakodowane go. IMHO, "błąd" jest faktycznie w specyfikacji języka Java - powinny one pozwolić == na wykonanie equals() i użyć === do porównywania tożsamości (które jest rzadko używane).


Aby zrobić to poprawnie, zalecamy użycie koloru enum. Wtedy twój kod będzie tylko jedna linia:

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; 
    } 
} 

po prostu:

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

Jeśli Color to interfejs, można uprościć i udoskonalić swój kod uzależniając enum BugColor extends Color - będę pozostaw implementację jako ćwiczenie dla ciebie.

+0

+1 za używanie wyliczenia, ale @OP, wyliczenia nie są uwzględnione w programie nauczania APCS, więc przygotuj się na to, aby nauczyciel zapytał o ich użycie. – Vulcan

+0

Nie jestem pewien, co to jest "enum", ale do tych celów .equals() działał jak urok. Dzięki! –

Powiązane problemy