Miniproyecto 2D: libro de calificaciones
Miniproyecto: cree un pequeño libro de calificaciones usando una matriz 2D de int. Imprima tablas alineadas, calcule promedios por estudiante y por tarea, encuentre a los mejores estudiantes, ajuste las calificaciones y genere un informe resumido.
Miniproyecto 2D: libro de calificaciones es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 4 de 6. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 6 lecciones en total.
Descripción del proyecto
Objetivo del proyecto: represente un registro de calificaciones como una matriz 2D de int, donde cada fila corresponda a un estudiante y cada columna a una tarea, cuestionario o examen. Imprimirá una tabla alineada, calculará los promedios por estudiante y por tarea, encontrará el estudiante y la tarea con la calificación más alta, ajustará las calificaciones y generará un informe resumido.
Siga las escenas y ejecute cada ejemplo de código en orden. No se necesita entrada.
Crear e imprimir
Paso 1: cree una matriz pequeña de calificaciones e imprímala con columnas alineadas. Usamos un método auxiliar para calcular los anchos de columna y un método de impresión que rellena cada valor.
public class Main {
// Join helper for one-dimensional arrays (space-separated)
static String join(int[] a) {
String s = "";
for (int i = 0; i < a.length; i = i + 1) {
s = s + a[i] + (i + 1 < a.length ? " " : "");
}
return s;
}
// Compute column widths for aligned printing (jagged-aware)
static int[] widths(int[][] m) {
int maxCols = 0;
for (int r = 0; r < m.length; r = r + 1) {
if (m[r].length > maxCols) maxCols = m[r].length;
}
int[] w = new int[maxCols];
for (int r = 0; r < m.length; r = r + 1) {
for (int c = 0; c < m[r].length; c = c + 1) {
int len = Integer.toString(m[r][c]).length();
if (len > w[c]) w[c] = len;
}
}
for (int c = 0; c < w.length; c = c + 1) if (w[c] < 1) w[c] = 1;
return w;
}
// Print matrix with aligned columns
static void printAligned(int[][] m) {
int[] w = widths(m);
for (int r = 0; r < m.length; r = r + 1) {
String line = "";
for (int c = 0; c < m[r].length; c = c + 1) {
String s = Integer.toString(m[r][c]);
while (s.length() < w[c]) s = " " + s;
line = line + s + (c + 1 < m[r].length ? " " : "");
}
System.out.println(line);
}
}
public static void main(String[] args) {
// Create a 4x5 gradebook (4 students, 5 assignments)
int[][] g = {
{78, 85, 90, 88, 92},
{95, 91, 89, 93, 87},
{60, 72, 70, 68, 75},
{88, 84, 79, 85, 90}
};
System.out.println("Gradebook (rows: students, cols: assignments):");
printAligned(g);
}
}
Promedios de filas y columnas
Paso 2: calcule los promedios por estudiante (fila) y por tarea (columna). Los promedios de las columnas deben comprobar la longitud de cada fila para funcionar de forma segura con arrays irregulares.
public class Main {
// Average of one row (student r)
static double rowAverage(int[][] g, int r) {
int sum = 0;
for (int c = 0; c < g[r].length; c = c + 1) sum = sum + g[r][c];
return (double) sum / g[r].length;
}
// Average of one column (assignment c)
static double colAverage(int[][] g, int c) {
int sum = 0;
int count = 0;
for (int r = 0; r < g.length; r = r + 1) {
if (c < g[r].length) { sum = sum + g[r][c]; count = count + 1; }
}
return (double) sum / count;
}
public static void main(String[] args) {
int[][] g = {
{78, 85, 90, 88, 92},
{95, 91, 89, 93, 87},
{60, 72, 70, 68, 75},
{88, 84, 79, 85, 90}
};
// Compute per-student averages
for (int r = 0; r < g.length; r = r + 1) {
double avg = rowAverage(g, r);
System.out.println("student " + r + " avg = " + String.format("%.2f", avg));
}
// Compute per-assignment averages
int assignments = g[0].length;
for (int c = 0; c < assignments; c = c + 1) {
double avg = colAverage(g, c);
System.out.println("assignment " + c + " avg = " + String.format("%.2f", avg));
}
}
}
Mejor estudiante y tarea
Paso 3: encuentre el estudiante con el promedio de fila más alto y la tarea con el promedio de columna más alto.
public class Main {
static double rowAverage(int[][] g, int r) {
int sum = 0;
for (int c = 0; c < g[r].length; c = c + 1) sum = sum + g[r][c];
return (double) sum / g[r].length;
}
static double colAverage(int[][] g, int c) {
int sum = 0;
int count = 0;
for (int r = 0; r < g.length; r = r + 1) { if (c < g[r].length) { sum = sum + g[r][c]; count = count + 1; } }
return (double) sum / count;
}
public static void main(String[] args) {
int[][] g = {
{78, 85, 90, 88, 92},
{95, 91, 89, 93, 87},
{60, 72, 70, 68, 75},
{88, 84, 79, 85, 90}
};
// Find top student by average
int bestStudent = -1;
double bestAvg = -1.0;
for (int r = 0; r < g.length; r = r + 1) {
double avg = rowAverage(g, r);
if (avg > bestAvg) { bestAvg = avg; bestStudent = r; }
}
// Find top assignment by average
int assignments = g[0].length;
int bestAssign = -1;
double bestCol = -1.0;
for (int c = 0; c < assignments; c = c + 1) {
double avg = colAverage(g, c);
if (avg > bestCol) { bestCol = avg; bestAssign = c; }
}
System.out.println("top student = " + bestStudent + " (avg=" + String.format("%.2f", bestAvg) + ")");
System.out.println("top assignment = " + bestAssign + " (avg=" + String.format("%.2f", bestCol) + ")");
}
}
Ajustar calificaciones
Paso 4: aplique un ajuste uniforme (por ejemplo, +5 puntos a cada calificación, con un máximo de 100) e imprima las matrices antes y después.
public class Main {
// Add a flat curve of k points (capped at 100)
static void curve(int[][] g, int k) {
for (int r = 0; r < g.length; r = r + 1) {
for (int c = 0; c < g[r].length; c = c + 1) {
int v = g[r][c] + k;
if (v > 100) v = 100;
g[r][c] = v;
}
}
}
static void print(int[][] g) {
for (int r = 0; r < g.length; r = r + 1) {
for (int c = 0; c < g[r].length; c = c + 1) {
System.out.print(g[r][c] + (c + 1 < g[r].length ? " " : ""));
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] g = {
{78, 85, 90, 88, 92},
{95, 91, 89, 93, 87},
{60, 72, 70, 68, 75},
{88, 84, 79, 85, 90}
};
System.out.println("before curve:");
print(g);
curve(g, 5); // +5 points each
System.out.println("after curve (+5, capped at 100):");
print(g);
}
}
Informe resumido
Paso 5: genere un informe sencillo: promedios por estudiante y promedio general de la clase. (Más adelante podría ampliarlo para incluir calificaciones con letras).
public class Main {
static double rowAverage(int[][] g, int r) {
int sum = 0;
for (int c = 0; c < g[r].length; c = c + 1) sum = sum + g[r][c];
return (double) sum / g[r].length;
}
static double overallAverage(int[][] g) {
int sum = 0;
int count = 0;
for (int r = 0; r < g.length; r = r + 1) {
for (int c = 0; c < g[r].length; c = c + 1) { sum = sum + g[r][c]; count = count + 1; }
}
return (double) sum / count;
}
public static void main(String[] args) {
int[][] g = {
{83, 90, 95, 93, 97}, // assume already curved values
{100, 96, 94, 98, 92},
{65, 77, 75, 73, 80},
{93, 89, 84, 90, 95}
};
// Print each student average
for (int r = 0; r < g.length; r = r + 1) {
double avg = rowAverage(g, r);
System.out.println("student " + r + " avg = " + String.format("%.2f", avg));
}
// Print overall average
System.out.println("overall avg = " + String.format("%.2f", overallAverage(g)));
}
}
Comprobación del promedio del estudiante
Comprobación rápida: ¿Qué fórmula calcula el promedio del estudiante r?
Repaso y siguiente paso
Repaso: Modeló un libro de calificaciones con un arreglo bidimensional, imprimió tablas alineadas, calculó promedios por fila y columna, encontró a los estudiantes con mejor rendimiento, ajustó las calificaciones y generó un informe resumido. Siguiente paso: encapsular estas utilidades en una clase auxiliar reutilizable.
Preguntas frecuentes
¿La lección «Miniproyecto 2D: libro de calificaciones» es gratis?
Sí — el texto completo de «Miniproyecto 2D: libro de calificaciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 6 lecciones en total.
¿Qué aprenderé en «Miniproyecto 2D: libro de calificaciones»?
Miniproyecto: cree un pequeño libro de calificaciones usando una matriz 2D de int. Imprima tablas alineadas, calcule promedios por estudiante y por tarea, encuentre a los mejores estudiantes, ajuste… Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 6.
¿Cuánto tiempo toma la lección «Miniproyecto 2D: libro de calificaciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos de arrays 2D e iteración anidada
- Arrays irregulares y formato de tablas
- Máximos por fila/columna, transposición y formato
- Miniproyecto 2D: libro de calificaciones
- Utilidades 2D como clase auxiliar (refactorización)
- Limpieza y validación de datos 2D