2012-09-21 12 views
6

Estoy usando GridWorld en mi clase de informática AP, y parte de lo que estamos haciendo es cambiar el color del error (un objeto). He encontrado una forma muy básica de hacerlo, pero estoy tratando de incorporar cadenas para que el usuario pueda escribir en qué color desea que esté el error en lugar de tener que poner los valores numéricos para RGB. Puedo obtener el valor de la cadena para que sea del color que quiero, escribiendo "rojo" y haciendo que la cadena almacene eso. Pero, ¿cómo conseguiría que esa cuerda se traduzca en el color? No estoy muy seguro de haber redactado esto con la suficiente claridad, pero he adjuntado mi código para que alguien entienda y pueda ayudar.Establecer el color de un objeto

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

Respuesta

5

Esta vieja historia ...

al comparar cadenas en Java, debe utilizar .equals(). El operador == es verdadero solo si ambos operandos son el mismo objeto exacto. Prueba esto:

if (color1.equals("red")) 

Se trata de un "error" común cometido por los programadores familiarizados con javascript, donde el operador == funcionaría como se ha codificado. En mi humilde opinión, el "error" está realmente en la especificación del lenguaje java: deberían haber permitido == ejecutar equals() y usar === para la comparación de identidad (que rara vez se usa realmente).


Para hacer esto correctamente, le recomiendo usar un enum para los colores. A continuación, el código sería sólo una línea:

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

entonces simplemente:

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

Si Color es una interfaz, se puede simplificar y mejorar su código, haciendo que el enum BugColor extends Color - Te voy deje la implementación como un ejercicio para usted.

+0

+1 para el uso de enum, pero @OP, enumeraciones no están cubiertas en el plan de estudios de APCS, así que prepárese para que su profesor le pregunte sobre su uso de ellas. – Vulcan

+0

No estoy seguro de qué es "enum", pero para estos fines .equals() funcionó como un amuleto. ¡Gracias! –

Cuestiones relacionadas