Aplicaciones Prácticas de Arreglos
En este paso final, exploraremos aplicaciones prácticas de los arreglos a través de un ejemplo completo. Crearemos un sistema simple de gestión de calificaciones que demuestra cómo se pueden usar los arreglos en escenarios de programación del mundo real.
Creación de un Rastreador de Calificaciones de Estudiantes
Construyamos un programa que gestione las calificaciones de los estudiantes. Este programa:
- Almacenará los nombres de los estudiantes y sus calificaciones
- Calculará la calificación promedio
- Encontrará las calificaciones más altas y más bajas
- Determinará cuántos estudiantes obtuvieron una calificación superior al promedio
Cree un nuevo archivo llamado GradeTracker.java en su WebIDE:
public class GradeTracker {
public static void main(String[] args) {
// Arreglos para almacenar la información de los estudiantes
String[] studentNames = {"Alice", "Bob", "Charlie", "David", "Emma",
"Frank", "Grace", "Hannah", "Ian", "Julia"};
int[] studentGrades = {85, 92, 78, 65, 88, 72, 95, 83, 79, 91};
// Mostrar todos los registros de estudiantes
System.out.println("Registros de Calificaciones de Estudiantes:");
System.out.println("---------------------");
System.out.println("Nombre\t\tCalificación");
System.out.println("---------------------");
for (int i = 0; i < studentNames.length; i++) {
// Agregar una pestaña adicional para nombres cortos para alinear las columnas
String tab = studentNames[i].length() <= 5 ? "\t\t" : "\t";
System.out.println(studentNames[i] + tab + studentGrades[i]);
}
// Calcular estadísticas
int sum = 0;
int highest = studentGrades[0];
int lowest = studentGrades[0];
String highestStudent = studentNames[0];
String lowestStudent = studentNames[0];
for (int i = 0; i < studentGrades.length; i++) {
// Sumar para el cálculo del promedio
sum += studentGrades[i];
// Verificar la calificación más alta
if (studentGrades[i] > highest) {
highest = studentGrades[i];
highestStudent = studentNames[i];
}
// Verificar la calificación más baja
if (studentGrades[i] < lowest) {
lowest = studentGrades[i];
lowestStudent = studentNames[i];
}
}
// Calcular el promedio
double average = (double) sum / studentGrades.length;
// Contar los estudiantes por encima del promedio
int aboveAverageCount = 0;
for (int grade : studentGrades) {
if (grade > average) {
aboveAverageCount++;
}
}
// Mostrar estadísticas
System.out.println("\nEstadísticas de la Clase:");
System.out.println("----------------");
System.out.printf("Promedio de la Clase: %.2f\n", average);
System.out.println("Calificación más alta: " + highest + " (" + highestStudent + ")");
System.out.println("Calificación más baja: " + lowest + " (" + lowestStudent + ")");
System.out.println("Número de estudiantes por encima del promedio: " + aboveAverageCount);
}
}
Compile y ejecute este programa:
javac GradeTracker.java
java GradeTracker
Debería ver una salida como esta:
Student Grade Records:
---------------------
Name Grade
---------------------
Alice 85
Bob 92
Charlie 78
David 65
Emma 88
Frank 72
Grace 95
Hannah 83
Ian 79
Julia 91
Class Statistics:
----------------
Class Average: 82.80
Highest Grade: 95 (Grace)
Lowest Grade: 65 (David)
Number of students above average: 5
Este programa demuestra cómo se pueden usar los arreglos para gestionar datos relacionados (nombres y calificaciones de estudiantes) y realizar cálculos sobre esos datos.
Agregar Categorías de Calificaciones
Ahora, mejoremos nuestro rastreador de calificaciones agregando categorías de calificaciones. Cree un nuevo archivo llamado EnhancedGradeTracker.java:
public class EnhancedGradeTracker {
public static void main(String[] args) {
// Arreglos para almacenar la información de los estudiantes
String[] studentNames = {"Alice", "Bob", "Charlie", "David", "Emma",
"Frank", "Grace", "Hannah", "Ian", "Julia"};
int[] studentGrades = {85, 92, 78, 65, 88, 72, 95, 83, 79, 91};
// Crear arreglos para contar las calificaciones en cada categoría
int[] gradeCounts = new int[5]; // A, B, C, D, F
// Mostrar todos los registros de estudiantes con categorías de calificaciones
System.out.println("Registros de Calificaciones de Estudiantes:");
System.out.println("------------------------------");
System.out.println("Nombre\t\tPuntuación\tCalificación");
System.out.println("------------------------------");
for (int i = 0; i < studentNames.length; i++) {
// Calcular la calificación con letras
char letterGrade = calculateGrade(studentGrades[i]);
// Contar las calificaciones por categoría
switch (letterGrade) {
case 'A': gradeCounts[0]++; break;
case 'B': gradeCounts[1]++; break;
case 'C': gradeCounts[2]++; break;
case 'D': gradeCounts[3]++; break;
case 'F': gradeCounts[4]++; break;
}
// Agregar una pestaña adicional para nombres cortos para alinear las columnas
String tab = studentNames[i].length() <= 5 ? "\t\t" : "\t";
System.out.println(studentNames[i] + tab + studentGrades[i] + "\t" + letterGrade);
}
// Calcular estadísticas
double average = calculateAverage(studentGrades);
// Mostrar estadísticas
System.out.println("\nEstadísticas de la Clase:");
System.out.println("----------------");
System.out.printf("Promedio de la Clase: %.2f\n", average);
// Mostrar la distribución de calificaciones
System.out.println("\nDistribución de Calificaciones:");
System.out.println("------------------");
System.out.println("A: " + displayStars(gradeCounts[0]));
System.out.println("B: " + displayStars(gradeCounts[1]));
System.out.println("C: " + displayStars(gradeCounts[2]));
System.out.println("D: " + displayStars(gradeCounts[3]));
System.out.println("F: " + displayStars(gradeCounts[4]));
}
// Método para calcular la calificación con letras a partir de una puntuación numérica
public static char calculateGrade(int score) {
if (score >= 90) {
return 'A';
} else if (score >= 80) {
return 'B';
} else if (score >= 70) {
return 'C';
} else if (score >= 60) {
return 'D';
} else {
return 'F';
}
}
// Método para calcular el promedio de un arreglo de enteros
public static double calculateAverage(int[] arr) {
int sum = 0;
for (int value : arr) {
sum += value;
}
return (double) sum / arr.length;
}
// Método para crear una cadena de estrellas que represente un conteo
public static String displayStars(int count) {
StringBuilder stars = new StringBuilder();
for (int i = 0; i < count; i++) {
stars.append("*");
}
return stars.toString() + " (" + count + ")";
}
}
Compile y ejecute este programa:
javac EnhancedGradeTracker.java
java EnhancedGradeTracker
Debería ver una salida como esta:
Student Grade Records:
------------------------------
Name Score Grade
------------------------------
Alice 85 B
Bob 92 A
Charlie 78 C
David 65 D
Emma 88 B
Frank 72 C
Grace 95 A
Hannah 83 B
Ian 79 C
Julia 91 A
Class Statistics:
----------------
Class Average: 82.80
Grade Distribution:
------------------
A: *** (3)
B: *** (3)
C: *** (3)
D: * (1)
F: (0)
Este ejemplo mejorado demuestra:
- Usar múltiples arreglos para almacenar datos relacionados
- Crear métodos de utilidad para cálculos y formateo
- Contar y categorizar datos
- Crear una representación visual de los datos del arreglo
Procesamiento de Datos de Arreglos Basado en Condiciones
Para nuestro ejemplo final, creemos un programa que procese datos de arreglos basados en condiciones. Cree un archivo llamado FilteredGrades.java:
public class FilteredGrades {
public static void main(String[] args) {
// Arreglos para almacenar la información de los estudiantes
String[] studentNames = {"Alice", "Bob", "Charlie", "David", "Emma",
"Frank", "Grace", "Hannah", "Ian", "Julia"};
int[] studentGrades = {85, 92, 78, 65, 88, 72, 95, 83, 79, 91};
// Crear un umbral para aprobar
int passingGrade = 75;
// Mostrar todos los registros de estudiantes con estado de aprobado/reprobado
System.out.println("Registros de Calificaciones de Estudiantes:");
System.out.println("------------------------------");
System.out.println("Nombre\t\tPuntuación\tEstado");
System.out.println("------------------------------");
// Contar los estudiantes aprobados y reprobados
int passingCount = 0;
for (int i = 0; i < studentNames.length; i++) {
String status = (studentGrades[i] >= passingGrade) ? "APROBADO" : "REPROBADO";
// Contar los estudiantes aprobados
if (studentGrades[i] >= passingGrade) {
passingCount++;
}
// Agregar una pestaña adicional para nombres cortos para alinear las columnas
String tab = studentNames[i].length() <= 5 ? "\t\t" : "\t";
System.out.println(studentNames[i] + tab + studentGrades[i] + "\t" + status);
}
// Crear arreglos para almacenar solo los estudiantes aprobados
String[] passingStudents = new String[passingCount];
int[] passingScores = new int[passingCount];
// Llenar los arreglos de estudiantes aprobados
int index = 0;
for (int i = 0; i < studentNames.length; i++) {
if (studentGrades[i] >= passingGrade) {
passingStudents[index] = studentNames[i];
passingScores[index] = studentGrades[i];
index++;
}
}
// Mostrar solo los estudiantes aprobados
System.out.println("\nEstudiantes Aprobados (Puntuación >= 75):");
System.out.println("------------------------------");
System.out.println("Nombre\t\tPuntuación");
System.out.println("------------------------------");
for (int i = 0; i < passingStudents.length; i++) {
// Agregar una pestaña adicional para nombres cortos para alinear las columnas
String tab = passingStudents[i].length() <= 5 ? "\t\t" : "\t";
System.out.println(passingStudents[i] + tab + passingScores[i]);
}
// Calcular y mostrar estadísticas
System.out.println("\nEstadísticas de la Clase:");
System.out.println("----------------");
System.out.println("Total de Estudiantes: " + studentNames.length);
System.out.println("Aprobados: " + passingCount);
System.out.println("Reprobados: " + (studentNames.length - passingCount));
System.out.printf("Tasa de Aprobación: %.1f%%\n",
(double) passingCount / studentNames.length * 100);
}
}
Compile y ejecute este programa:
javac FilteredGrades.java
java FilteredGrades
Debería ver una salida como esta:
Student Grade Records:
------------------------------
Name Score Status
------------------------------
Alice 85 PASS
Bob 92 PASS
Charlie 78 PASS
David 65 FAIL
Emma 88 PASS
Frank 72 FAIL
Grace 95 PASS
Hannah 83 PASS
Ian 79 PASS
Julia 91 PASS
Passing Students (Score >= 75):
------------------------------
Name Score
------------------------------
Alice 85
Bob 92
Charlie 78
Emma 88
Grace 95
Hannah 83
Ian 79
Julia 91
Class Statistics:
----------------
Total Students: 10
Passing: 8
Failing: 2
Pass Rate: 80.0%
Este ejemplo demuestra:
- Usar lógica condicional con arreglos
- Crear arreglos filtrados basados en condiciones
- Calcular estadísticas a partir de datos de arreglos
- Presentar información de manera formateada
En este paso, ha visto cómo se pueden aplicar los arreglos para resolver problemas prácticos. Ha aprendido a gestionar datos relacionados, realizar cálculos y crear vistas filtradas de datos de arreglos basadas en condiciones. Estas habilidades servirán como una base sólida para trabajar con arreglos en aplicaciones Java del mundo real.