Voici un exemple de la façon dont vous pourriez le faire avec un peu de Java 9:
public static void main(String[] args) throws ParseException, ClassNotFoundException {
Scanner sc = new Scanner(System.in);
System.out.println("\nEnter your color\n" +
"BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");
List<Color> colorArray= new ArrayList<>();
Map<String, Color> colorMap = Map.ofEntries(entry("BLUE", Color.BLUE),
entry("BLACK", Color.BLACK),
entry("ORANGE", Color.ORANGE)); // TODO: add more colours
while(sc.hasNext()) {
String next = sc.next();
Color c = colorMap.get(next);
if(c == null) {
if("END".equals(next)) {
break;
}
System.err.printf("Sorry, could not find %s%n", next);
}
else {
colorArray.add(c);
System.out.printf("Added %s%n", c);
}
}
System.out.println(colorArray);
}
Ceci est la sortie d'un échantillon analysé:
Enter your color
BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:
> BLUE
Added java.awt.Color[r=0,g=0,b=255]
> BLACK
Added java.awt.Color[r=0,g=0,b=0]
> ORANGE
Added java.awt.Color[r=255,g=200,b=0]
> END
[java.awt.Color[r=0,g=0,b=255], java.awt.Color[r=0,g=0,b=0], java.awt.Color[r=255,g=200,b=0]]
Voici une autre version basée sur idées @VHS à l'aide de réflexion:
public static void main(String[] args) throws ParseException, ClassNotFoundException, IllegalAccessException {
Scanner sc = new Scanner(System.in);
System.out.println("\nEnter your color\n" +
"BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");
List<Color> colorArray= new ArrayList<>();
Class<Color> colorClass = Color.class;
while(sc.hasNext()) {
String next = sc.next();
try {
Color c = colorClass.cast(colorClass.getField(next.toLowerCase()).get(null));
colorArray.add(c);
System.out.printf("Added %s%n", c);
} catch (NoSuchFieldException e) {
if("END".equals(next)) {
break;
}
System.err.printf("Sorry, could not find %s%n", next);
}
}
System.out.println(colorArray);
}
Idéalement, vous combiner les deux idées (utiliser une carte et de réflexion), donc que vous supportez les couleurs déclarées + les couleurs non déclarées dans java.awt.Color.
Merci pour tous ces votes. Mais peut-être qu'une explication serait un beau geste aussi. –
Vous y parvenez en déterminant d'abord les étapes logiques nécessaires, puis en procédant à la conversion en code. Lorsque vous ne savez pas comment faire une étape spécifique, vous effectuez des recherches (principalement en effectuant une recherche avec le moteur de recherche de votre choix), puis vous posez une question si vous ne trouvez pas la réponse. – Gendarme
Mais utilisez-vous [java.awt.Color] (https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html) ou une classe de couleur personnalisée? Si oui, montrez-le. –