Asociar personas y colores con HashMap y List en Java
En este ejercicio trabajamos con la clase HashMap de Java para asociar nombres de personas con sus colores favoritos. El objetivo principal es permitir el registro de varios usuarios, donde cada uno puede indicar uno o varios colores que le gustan. Para lograr esto, utilizamos una estructura Map<String, List<String>>, donde la clave representa el nombre de la persona y el valor es una lista con sus colores favoritos.
El programa comienza solicitando al usuario cuántas personas desea registrar. Por cada persona, se pide su nombre y luego una serie de colores. El proceso de entrada de colores se repite hasta que el usuario escriba la palabra clave "salir", lo que indica que ha terminado de introducir colores para ese usuario. Este enfoque permite que una persona tenga múltiples colores asociados sin necesidad de especificar cuántos de antemano.
Gracias a esta implementación para asociar personas y colores con HashMap y List en Java, al final del proceso se muestran todos los nombres registrados junto con sus listas de colores favoritos. Además, se ha incluido un manejo de errores básico para prevenir fallos si el usuario introduce un valor no numérico al indicar cuántas personas quiere registrar. Esta práctica resulta útil para familiarizarse con el uso de mapas y listas en Java, así como con la captura de entradas del usuario y el manejo de excepciones.
Debería de preguntar lo siguiente:
Pregunta: Cuántas personas se van a registrar:
Respuesta: 2
Pregunta: Tu nombre es:
Respuesta: Juan
Imprime: Nombre añadido con exito
Pregunta: Ingrese uno o varios colores: Si quieres abandonar el programa, escribe salir
Respuesta: Rojo
Pregunta: ¿Tienes algún otro color favorito? Escribe 'salir' si no.
Respuesta: Verde
Pregunta: ¿Tienes algún otro color favorito? Escribe 'salir' si no.
Respuesta: salir
Pregunta: Tu nombre es:
Respuesta: Pepe
Imprime: Nombre añadido con exito
Pregunta: Ingrese uno o varios colores: Si quieres abandonar el programa, escribe salir
Respuesta: Amarillo
Pregunta: ¿Tienes algún otro color favorito? Escribe 'salir' si no.
Respuesta: Negro
Pregunta: ¿Tienes algún otro color favorito? Escribe 'salir' si no.
Respuesta: salir
Salida tras ejecutar el código:
Estas son las personas registradas y sus colores favoritos:
Nombre: Juan
colores favoritos: [Rojo, Verde]
Nombre: Pepe
colores favoritos: [Amarillo, Negro]
Código paso a paso:
package map;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class map05 {
public static void main(String[] args) {
// Variables con las que trabajaremos:
String cantidadPersonas;
int numeroPersonasRegistradas;
String nombre;
String coloresFavoritos;
// importamos la clase scanner y asignamos a la variable sc
Scanner sc = new Scanner(System.in);
// Creamos un map con una lista de valores, esto permite asociar una clave a varios valores.
// Una persona puede tener varios colores favoritos.
Map <String, List<String>> personasColores = new HashMap<>();
System.out.println("Cuántas personas se van a registrar: ");
cantidadPersonas = sc.nextLine();
// Si por algún motivo se introduce una letra, lanzará una excepción.
try{
numeroPersonasRegistradas = Integer.parseInt(cantidadPersonas);
// Mientras el número de personas es distinto a cero, se irá recorriendo el bucle.
while (numeroPersonasRegistradas !=0)
{
// Pre-incremento del número de personas registradas.
--numeroPersonasRegistradas;
System.out.println("Tu nombre es: ");
nombre = sc.nextLine();
// Si nombre está vacio se le lanzará un mensaje de nombre no válido.
if (nombre.isBlank())
{
System.out.println("Introduce un nombre valido");
break;
}
else
{
System.out.println("Nombre añadido con exito");
}
List <String> colores = new ArrayList<>();
// Si el nombre ha sido añadio con éxito, solicitará el color.
System.out.println("Ingrese uno o varios colores: " +
"Si quieres abandonar el programa, escribe salir");
// La variable color es booleana inicializada como verdadera,
// si se introduce salir, cambia a false y se sale del bucle.
Boolean color = true;
// Mientras el color sea verdadero, se pedirá el color favorito.
// Al mismo tiempo se añade a nuestra lista llamada colores.
// Una vez añadidos los colores favoritos, se podría escribir la opción de salir
// y comenzará a solicitar el nombre del siguiente usuario.
while (color) {
coloresFavoritos = sc.nextLine();
if (coloresFavoritos.equalsIgnoreCase("salir")) {
color = false;
} else {
colores.add(coloresFavoritos);
System.out.println("¿Tienes algún otro color favorito? Escribe 'salir' si no.");
}
}
// Finalmente, se añade el nombre y su color o colores. Un nombre podría tener varios colores.
personasColores.put(nombre, colores);
// Mostrar todos los nombres con su lista de colores favoritos
System.out.println("Estas son las personas registradas y sus colores favoritos: ");
// La variable entry representa un par clave valor dentro de un map.
for(Map.Entry<String, List<String>> entry : personasColores.entrySet())
{
System.out.println("Nombre: " + entry.getKey());
System.out.println("colores favoritos: " + entry.getValue());
}
}
//Cerramos la clase scanner.
sc.close();
// El error sera capturado y enviará un mensaje de formato incorrecto.
}catch(NumberFormatException e)
{
System.out.println("Formato incorrecto");
}
}}
Seguir leyendo:





