2012-09-21 17 views
6

Sto utilizzando GridWorld nella mia classe Computer Science AP e una parte di ciò che stiamo facendo è la modifica del colore del bug (un oggetto). Ho trovato un modo molto semplice per farlo, ma sto cercando di incorporare le stringhe per consentire all'utente di digitare in quale colore vorrebbe che il bug fosse, invece di dover inserire valori numerici per RGB. Sono in grado di ottenere il valore di stringa per essere il colore che voglio, digitando, "rosso" e avendo la stringa memorizzare quello. Ma come potrei ottenere quella stringa per tradurre nel colore? Non sono sicuro di averlo espresso abbastanza chiaramente, ma ho allegato il mio codice, quindi spero che qualcuno capisca e possa aiutare.Impostazione del colore di un oggetto

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

risposta

5

Questo vecchio castagno ...

Quando si confrontano le stringhe in Java, è necessario utilizzare .equals(). L'operatore == è vero solo se entrambi gli operandi sono lo stesso oggetto esatto. Prova questo:

if (color1.equals("red")) 

Si tratta di un "errore" comune fatto dai programmatori che hanno familiarità con javascript, dove l'operatore == avrebbe funzionato come avete codificato esso. IMHO, l'errore è in realtà nelle specifiche del linguaggio java - avrebbero dovuto consentire == di eseguire equals() e utilizzare === per il confronto dell'identità (che viene raramente effettivamente utilizzato).


Per farlo correttamente, mi consiglia di utilizzare un enum per i colori. Allora il vostro codice sarebbe una sola riga:

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

poi semplicemente:

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

Se Color è un interfaccia, è possibile semplificare e migliorare il codice, rendendo il enum BugColor extends Color - Ti lasciare l'implementazione come esercizio per te.

+0

+1 per l'uso di enum, ma @OP, le enumerazioni non sono trattate nel programma di studio di APCS, quindi preparatevi a chiedere al vostro insegnante in merito al vostro utilizzo. – Vulcan

+0

Non sei sicuro di cosa sia "enum" ma per questi scopi. Equals() ha funzionato come un incantesimo. Grazie! –

Problemi correlati