Publicado en Tema 8 • Ejercicios

Ejercicio 3: Gestión de una lista de nombres con ArrayList

Enunciado

En este ejercicio vamos a desarrollar un pequeño sistema interactivo para gestionar una lista de cadenas de texto (nombres) utilizando ArrayList y la entrada de datos por teclado.

Requisitos:

  • Crear la lista: Declarar una variable List<String> e instanciarla como ArrayList con 5 nombres iniciales.
  • Mostrar nombres: Implementar el recorrido de la lista utilizando un bucle for-each.
  • Interactividad: Solicitar al usuario un nombre para añadirlo a la colección.
  • Eliminación lógica: Solicitar un nombre para eliminarlo. Si el nombre existe, se borra; si no, se muestra un mensaje de error.
  • Estadísticas: Mostrar el número total de elementos usando el método size().

Solución Propuesta

A continuación se muestra el código completo. Es importante destacar el uso de tipos genéricos <String> para asegurar que nuestra lista solo contenga cadenas de texto, evitando errores de tipo en tiempo de ejecución[cite: 2781, 2782].

package Tema8.Ejercicios.ejercicio3;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Ejercicio3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 1. Declarar e inicializar la lista con tipos genéricos
        List<String> listaNombres = new ArrayList<>();

        // 2. Añadir nombres iniciales
        listaNombres.add("Fran");
        listaNombres.add("Ana");
        listaNombres.add("Luis");
        listaNombres.add("Marta");
        listaNombres.add("Pepe");

        // 3. Mostrar la lista usando un bucle for-each
        System.out.println("Nombres en la lista actual:");
        for (String nombre : listaNombres) {
            System.out.println("- " + nombre);
        }

        // 4. Añadir un nuevo nombre solicitado al usuario
        System.out.print("\nIntroduce un nuevo nombre: ");
        String nuevoNombre = sc.nextLine();
        listaNombres.add(nuevoNombre);
        System.out.println(nuevoNombre + " se ha añadido correctamente.");

        // 5. Eliminar un nombre específico
        System.out.print("\n¿Qué nombre quieres borrar?: ");
        String borrarNombre = sc.nextLine();

        // El método remove(Object) devuelve true si el elemento existía y fue eliminado
        if (listaNombres.remove(borrarNombre)) {
            System.out.println("Se ha borrado correctamente a: " + borrarNombre);
        } else {
            System.out.println("Error: El nombre " + borrarNombre + " no se encuentra en la lista.");
        }

        // 6. Mostrar el total de elementos
        System.out.println("\nActualmente hay un total de " + listaNombres.size() + " nombres en la lista.");
        
        sc.close();
    }
}

Conceptos clave aplicados

  • Tipos Genéricos: El uso de <String> indica que la colección solo aceptará objetos de ese tipo, proporcionando seguridad tipográfica[cite: 2781].
  • Bucle For-Each: Es la forma más limpia y eficiente de recorrer colecciones cuando no necesitamos manipular el índice directamente[cite: 2746].
  • Método remove: Al pasarle un objeto (String), busca la primera ocurrencia y la elimina. Es sensible a mayúsculas y minúsculas.