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
Stringa una listaArrayList<Double>usandoDouble.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:
- Wrappers (Double): Las colecciones de Java (como
ArrayList) no pueden almacenar tipos primitivos directamente. Por ello, usamosDouble, que es el objeto que envuelve al primitivodouble. - Parsing: El método estático
Double.valueOf()es esencial cuando recibimos datos de fuentes externas como archivos de texto o entradas de usuario. - Autoboxing/Unboxing: Java realiza la conversión entre el objeto y el primitivo de forma automática, permitiéndonos sumar un
Doublea una variabledoublesin necesidad de conversiones manuales.