Publicado en Tema 8 • Ejercicios

Ejercicio 4: Envoltorios (Wrappers) - Procesador de Calificaciones

Enunciado

El objetivo de este ejercicio es trabajar con la conversión de tipos y las clases envoltorio (Wrappers) en Java. Crearemos un programa que gestione notas académicas a partir de una fuente de datos en formato texto.

Tareas a realizar:

  • Conversión (Parsing): Transformar un array de String a una lista ArrayList<Double> usando Double.valueOf().
  • Cálculo (Unboxing): Calcular la nota media. Observaremos cómo Java extrae automáticamente el valor primitivo para operar.
  • Filtrado: Crear una lista secundaria para almacenar únicamente las notas que representen un aprobado (≥ 5.0).
---

Solución

En la implementación, aprovechamos el Autoboxing para añadir elementos a la lista y el Unboxing para realizar operaciones aritméticas de forma transparente.

package Tema8.Ejercicios.ejercicio4;

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

public class Ejercicio4 {
    public static void main(String[] args) {

        // 1. Crear la lista usando la clase envoltorio Double
        List<Double> notas = new ArrayList<>();

        // Datos de entrada simulados en formato String
        String[] notasEntrada = {"7.5", "4.2", "9.0", "3.8", "6.5"};

        // 2. Conversión (Parsing) y carga de la lista
        for (String notaTexto : notasEntrada) {
            // Convertimos el String a objeto Double
            Double notaDouble = Double.valueOf(notaTexto);
            notas.add(notaDouble);
        }
        System.out.println("Lista de notas cargada: " + notas);

        // 3. Cálculo de la media (Unboxing automático)
        double suma = 0;
        for (Double n : notas) {
            suma += n; // Aquí ocurre el unboxing: Double -> double
        }
        double media = suma / notas.size();
        System.out.println("La nota media es: " + media);

        // 4. Filtrado de aprobados
        List<Double> aprobados = new ArrayList<>();
        for (Double n : notas) {
            if (n >= 5.0) {
                aprobados.add(n);
            }
        }

        // Resultados finales
        System.out.println("Lista de aprobados (>= 5.0): " + aprobados);
        System.out.println("Total de alumnos aprobados: " + aprobados.size());
    }
}

Conceptos Teóricos Aplicados

Este ejercicio ilustra tres pilares fundamentales del manejo de datos en Java:

  1. Wrappers (Double): Las colecciones de Java (como ArrayList) no pueden almacenar tipos primitivos directamente. Por ello, usamos Double, que es el objeto que envuelve al primitivo double.
  2. Parsing: El método estático Double.valueOf() es esencial cuando recibimos datos de fuentes externas como archivos de texto o entradas de usuario.
  3. Autoboxing/Unboxing: Java realiza la conversión entre el objeto y el primitivo de forma automática, permitiéndonos sumar un Double a una variable double sin necesidad de conversiones manuales.