2012-09-21 17 views
6

Ich verwende GridWorld in meiner AP-Informatik-Klasse, und ein Teil von dem, was wir tun, ändert die Farbe des Fehlers (ein Objekt). Ich habe einen sehr einfachen Weg gefunden, dies zu tun, aber ich versuche, Zeichenfolgen einzubauen, um dem Benutzer zu ermöglichen, die Farbe einzugeben, in der er den Fehler haben möchte, anstatt Zahlenwerte für RGB eingeben zu müssen. Ich bin in der Lage, den String-Wert zu bekommen, um die Farbe zu sein, die ich will, indem Sie "rot" eintippen und den String das speichern lassen. Aber wie sollte ich diese Zeichenfolge in die Farbe übersetzen lassen? Ich bin nicht wirklich sicher, ob ich das klar genug formuliert habe, aber ich habe meinen Code angehängt, damit hoffentlich jemand versteht und helfen kann.Einstellen der Farbe eines Objekts

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

Antwort

5

Diese alte Kastanie ...

Wenn Strings in Java zu vergleichen, müssen Sie .equals() verwenden. Der Operator == ist nur wahr, wenn beide Operanden das gleiche genaue Objekt sind. Versuchen Sie folgendes:

if (color1.equals("red")) 

Dies ist ein gemeinsamer „Fehler“ gemacht von Programmierern vertraut mit Javascript, wo der == Operator funktionieren würde, wie Sie es codiert haben. IMHO, der "Fehler" ist tatsächlich in der Java-Sprachspezifikation - sie sollten ==equals() ausführen lassen und === für Identitätsvergleich verwenden (der selten wirklich benutzt wird).


dies richtig zu machen, empfehle ich eine enum für die Farben. Dann würde der Code nur eine Zeile sein:

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

dann einfach:

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

Wenn Color ist eine Schnittstelle, können Sie vereinfachen und Ihren Code verbessern, indem der enum BugColor extends Color machen - ich werde Überlassen Sie die Implementierung als Übung für Sie.

+0

+1 für Enum, aber @OP, enums sind nicht im APCS-Lehrplan enthalten, also seien Sie bereit für Ihren Lehrer, um nach Ihrer Verwendung zu fragen. – Vulcan

+0

Nicht sicher, was "Enum" ist, aber für diese Zwecke .equals() arbeitete wie ein Charme. Vielen Dank! –

Verwandte Themen