Está en la página 1de 3

Ejemplo práctico: la clase LibroCalificaciones que usa un arreglo para almacenar las califi caciones En esta sección

desarrollaremos aún más la clase LibroCalificaciones, que presentamos en el capítulo 3 y expandimos en los capítulos 4 y 5.
Recuerde que esta clase representa un libro de califi caciones utilizado por un instructor para almacenar y analizar un
conjunto de califi caciones de estudiantes. Las versiones anteriores de esta clase procesan un conjunto de califi caciones
introducidas por el usuario, pero no mantienen los valores de las califi caciones individuales en variables de instancia de la
clase. Por ende, los cálculos repetidos requieren que el usuario vuelva a introducir las mismas califi caciones. Una manera de
resolver este problema sería almacenar cada califi cación introducida por el usuario en una instancia individual de la clase. Por
ejemplo, podríamos crear las variables de instancia calificacion1, calificacion2, …, calificacion10 en la clase LibroCalificaciones
para almacenar 10 califi caciones de estudiantes. No obstante, el código para totalizar las califi caciones y determinar el
promedio de la clase sería voluminoso, y la clase no podría procesar más de 10 califi caciones a la vez. En esta sección
resolvemos este problema, almacenando las califi caciones en un arreglo. Almacenar las califi caciones de los estudiantes en
un arreglo en la clase LibroCalificaciones La versión de la clase LibroCalificaciones (fi gura 7.14) que presentamos aquí utiliza
un arreglo de enteros para almacenar las califi caciones de varios estudiantes en un solo examen. Esto elimina la necesidad de
introducir varias veces el mismo conjunto de califi caciones. El arreglo calificaciones se declara como una variable de instancia
en la línea 7; por lo tanto, cada objeto LibroCalificaciones mantiene su propio conjunto de califi caciones. El constructor de la
clase (líneas 10 a 14) tiene dos parámetros: el nombre del curso y un arreglo de califi caciones. Cuando una aplicación (por
ejemplo, la clase PruebaLibroCalificaciones en la fi gura 7.15) crea un objeto LibroCalificaciones, la aplicación pasa un arreglo
int existente al constructor, el cual asigna la referencia del arreglo a la variable de instancia calificaciones (línea 13). El tamaño
del arreglo calificaciones se determina en base a la clase que pasa el arreglo al constructor. Por ende, un objeto
LibroCalificaciones puede procesar un número de califi caciones variable. Los valores de las califi caciones en el arreglo que se
pasa podría introducirlos un usuario desde el teclado, o podrían leerse desde un archivo en el disco (como veremos en el
capítulo 14). En 7.8 Ejemplo práctico: la clase LibroCalificaciones que usa un arreglo para almacenar las califi caciones 279 280
Capítulo 7 Arreglos nuestra aplicación de prueba, simplemente inicializamos un arreglo con un conjunto de valores de califi
caciones (figura 7.15, línea 10). Una vez que las califi caciones se almacenan en una variable de instancia llamada
calificaciones de la clase LibroCalificaciones, todos los métodos de la clase pueden acceder a los elementos de calificaciones
según sea necesario, para realizar varios cálculos. 1 // Fig. 7.14: LibroCalificaciones.java 2 // Libro de calificaciones que utiliza
un arreglo para almacenar las calificaciones de una prueba. 3 4 public class LibroCalificaciones 5 { 6 private String
nombreDelCurso; // nombre del curso que representa este LibroCalificaciones 7 private int calificaciones[]; // arreglo de
calificaciones de estudiantes 8 9 // el constructor de dos argumentos inicializa nombreDelCurso y el arreglo calificaciones 10
public LibroCalificaciones( String nombre, int arregloCalif[] ) 11 { 12 nombreDelCurso = nombre; // inicializa nombreDelCurso
13 calificaciones = arregloCalif; // almacena las calificaciones 14 } // fin del constructor de LibroCalificaciones con dos
argumentos 15 16 // método para establecer el nombre del curso 17 public void establecerNombreDelCurso( String nombre )
18 { 19 nombreDelCurso = nombre; // almacena el nombre del curso 20 } // fin del método establecerNombreDelCurso 21
22 // método para obtener el nombre del curso 23 public String obtenerNombreDelCurso() 24 { 25 return nombreDelCurso;
26 } // fin del método obtenerNombreDelCurso 27 28 // muestra un mensaje de bienvenida al usuario de LibroCalificaciones
29 public void mostrarMensaje() 30 { 31 // obtenerNombreDelCurso obtiene el nombre del curso 32
System.out.printf( "Bienvenido al libro de calificaciones para\n%s!\n\n", 33 obtenerNombreDelCurso() ); 34 } // fin del
método mostrarMensaje 35 36 // realiza varias operaciones sobre los datos 37 public void procesarCalificaciones() 38 { 39 //
imprime el arreglo de calificaciones 40 imprimirCalificaciones(); 41 42 // llama al método obtenerPromedio para calcular la
calificación promedio 43 System.out.printf( "\nEl promedio de la clase es %.2f\n", obtenerPromedio() ); 44 45 // llama a los
métodos obtenerMinima y obtenerMaxima 46 System.out.printf( "La calificacion mas baja es %d\nLa calificacion mas alta es
%d\n\n", 47 obtenerMinima(), obtenerMaxima() ); Figura 7.14 | La clase LibroCalificaciones que usa un arreglo para
almacenar las califi caciones de una prueba. (Parte 1 de 3). 7.8 Ejemplo práctico: la clase LibroCalificaciones que usa un
arreglo para almacenar las califi caciones 281 48 49 // llama a imprimirGraficoBarras para imprimir el gráfico de distribución
de calificaciones 50 imprimirGraficoBarras(); 51 } // fin del método procesarCalificaciones 52 53 // busca la calificación más
baja 54 public int obtenerMinima() 55 { 56 int califBaja = calificaciones[ 0 ]; // asume que calificaciones[ 0 ] es la más baja 57
58 // itera a través del arreglo de calificaciones 59 for ( int calificacion : calificaciones ) 60 { 61 // si calificación es menor que
califBaja, se asigna a califBaja 62 if ( calificacion < califBaja ) 63 califBaja = calificacion; // nueva calificación más baja 64 } // fin
de for 65 66 return califBaja; // devuelve la calificación más baja 67 } // fin del método obtenerMinima 68 69 // busca la
calificación más alta 70 public int obtenerMaxima() 71 { 72 int califAlta = calificaciones[ 0 ]; // asume que calificaciones[ 0 ] es
la más alta 73 74 // itera a través del arreglo de calificaciones 75 for ( int calificacion : calificaciones ) 76 { 77 // si calificacion
es mayor que califAlta, se asigna a califAlta 78 if ( calificacion > califAlta ) 79 califAlta = calificacion; // nueva calificación más
alta 80 } // fin de for 81 82 return califAlta; // devuelve la calificación más alta 83 } // fin del método obtenerMaxima 84 85 //
determina la calificación promedio de la prueba 86 public double obtenerPromedio() 87 { 88 int total = 0; // inicializa el total
89 90 // suma las calificaciones para un estudiante 91 for ( int calificacion : calificaciones ) 92 total += calificacion; 93 94 //
devuelve el promedio de las calificaciones 95 return (double) total / calificaciones.length; 96 } // fin del método
obtenerPromedio 97 98 // imprime gráfico de barras que muestra la distribución de las calificaciones 99 public void
imprimirGraficoBarras() 100 { 101 System.out.println( "Distribucion de calificaciones:" ); 102 Figura 7.14 | La clase
LibroCalificaciones que usa un arreglo para almacenar las califi caciones de una prueba. (Parte 2 de 3). 282 Capítulo 7 Arreglos
El método procesarCalificaciones (líneas 37 a 51) contiene una serie de llamadas a métodos que produce un reporte en el que
se resumen las califi caciones. La línea 40 llama al método imprimirCalificaciones para imprimir el contenido del arreglo
calificaciones. Las líneas 134 a 136 en el método imprimirCalificaciones utilizan una instrucción for para imprimir las califi
caciones de los estudiantes. En este caso se debe utilizar una instrucción for controlada por contador, ya que las líneas 135 y
136 utilizan el valor de la variable contador estudiante para imprimir cada califi cación enseguida de un número de estudiante
específi co (vea la fi gura 7.15). Aunque los subíndices de los arreglos empiezan en 0, lo común es que el profesor enumere a
los estudiantes empezando desde 1. Por ende, las líneas 135 y 136 imprimen estudiante + 1 como el número de estudiante
para producir las etiquetas "Estudiante 1: ", "Estudiante 2: ", y así en lo sucesivo. A continuación, el método
procesarCalificaciones llama al método obtenerPromedio (línea 43) para obtener el promedio de las califi caciones en el
arreglo. El método obtenerPromedio (líneas 86 a 96) utiliza una instrucción for mejorada para totalizar los valores en el
arreglo calificaciones antes de calcular el promedio. El parámetro en el encabezado de la instrucción for mejorada (por
ejemplo, int calificacion) indica que para cada iteración, la variable int calificacion recibe un valor en el arreglo calificaciones.
Observe que el cálculo del promedio en la línea 95 utiliza calificaciones.length para determinar el número de califi caciones
que se van a promediar. 103 // almacena la frecuencia de las calificaciones en cada rango de 10 calificaciones 104 int
frecuencia[] = new int[ 11 ]; 105 106 // para cada calificación, incrementa la frecuencia apropiada 107 for ( int calificacion :
calificaciones ) 108 ++frecuencia[ calificacion / 10 ]; 109 110 // para cada frecuencia de calificación, imprime una barra en el
gráfico 111 for ( int cuenta = 0; cuenta < frecuencia.length; cuenta++ ) 112 { 113 // imprime etiquetas de las barras ( "00-09: ",
..., "90-99: ", "100: " ) 114 if ( cuenta == 10 ) 115 System.out.printf( "%5d: ", 100 ); 116 else 117 System.out.printf( "%02d-
%02d: ", 118 cuenta * 10, cuenta * 10 + 9 ); 119 120 // imprime barra de asteriscos 121 for ( int estrellas = 0; estrellas <
frecuencia[ cuenta ]; estrellas++ ) 122 System.out.print( "*" ); 123 124 System.out.println(); // inicia una nueva línea de salida
125 } // fin de for externo 126 } // fin del método imprimirGraficoBarras 127 128 // imprime el contenido del arreglo de
calificaciones 129 public void imprimirCalificaciones() 130 { 131 System.out.println( "Las calificaciones son:\n" ); 132 133 //
imprime la calificación de cada estudiante 134 for ( int estudiante = 0; estudiante < calificaciones.length; estudiante++ ) 135
System.out.printf( "Estudiante %2d: %3d\n", 136 estudiante + 1, calificaciones[ estudiante ] ); 137 } // fin del método
imprimirCalificaciones 138 } // fin de la clase LibroCalificaciones Figura 7.14 | La clase LibroCalificaciones que usa un arreglo
para almacenar las califi caciones de una prueba. (Parte 3 de 3). 7.8 Ejemplo práctico: la clase LibroCalificaciones que usa un
arreglo para almacenar las califi caciones 283 Las líneas 46 y 47 en el método procesarCalificaciones llaman a los métodos
obtenerMinima y obtenerMaxima para determinar las califi caciones más baja y más alta de cualquier estudiante en el
examen, en forma respectiva. Cada uno de estos métodos utiliza una instrucción for mejorada para iterar a través del arreglo
calificaciones. Las líneas 59 a 64 en el método obtenerMinima iteran a través del arreglo. Las líneas 62 y 63 comparan cada
califi cación con califBaja; si una califi cación es menor que califBaja, a califBaja se le asigna esa califi cación. Cuando la línea
66 se ejecuta, califBaja contiene la califi cación más baja en el arreglo. El método obtenerMaxima (líneas 70 a 83) funciona de
manera similar al método obtenerMinima. Por último, la línea 50 en el método procesarCalificaciones llama al método
imprimirGraficoBarras para imprimir un gráfi co de distribución de los datos de las califi caciones, mediante el uso de una
técnica similar a la de la fi gura 7.6. En ese ejemplo, calculamos en forma manual el número de califi caciones en cada
categoría (es decir, de 0 a 9, de 10 a 19, …, de 90 a 99 y 100) con sólo analizar un conjunto de califi caciones. En este ejemplo,
las líneas 107 y 108 utilizan una técnica similar a la de las fi guras 7.7 y 7.8 para calcular la frecuencia de las califi - caciones en
cada categoría. La línea 104 declara y crea el arreglo frecuencia de 11 valores int para almacenar la frecuencia de las califi
caciones en cada categoría de éstas. Para cada calificacion en el arreglo calificaciones, las líneas 107 y 108 incrementan el
elemento apropiado del arreglo frecuencia. Para determinar qué elemento se debe incrementar, la línea 108 divide la
calificacion actual entre 10, mediante la división entera. Por ejemplo, si calificacion es 85, la línea 108 incrementa
frecuencia[ 8 ] para actualizar la cuenta de califi caciones en el rango 80-89. Las líneas 111 a 125 imprimen a continuación el
gráfi co de barras (vea la fi gura 7.15), con base en los valores en el arreglo frecuencia. Al igual que las líneas 23 y 24 de la fi
gura 7.6, las líneas 121 y 122 de la fi gura 7.14 utilizan un valor en el arreglo frecuencia para determinar el número de
asteriscos a imprimir en cada barra. La clase PruebaLibroCalificaciones para demostrar la clase LibroCalificaciones La
aplicación de la fi gura 7.15 crea un objeto de la clase LibroCalificaciones (fi gura 7.14) mediante el uso del arreglo int
arregloCalif (que se declara y se inicializa en la línea 10). Las líneas 12 y 13 pasan el nombre de un curso y arregloCalif al
constructor de LibroCalificaciones. La línea 14 imprime un mensaje de bienvenida, y la línea 15 invoca el método
procesarCalificaciones del objeto LibroCalificaciones. La salida muestra el resumen de las 10 califi caciones en
miLibroCalificaciones. Figura 7.15 | PruebaLibroCalificaciones crea un objeto LibroCalificaciones usando un arreglo de califi
caciones, y después invoca al método procesarCalificaciones para analizarlas. (Parte 1 de 2). 1 // Fig. 7.15:
PruebaLibroCalificaciones.java 2 // Crea objeto LibroCalificaciones, usando un arreglo de calificaciones. 3 4 public class
PruebaLibroCalificaciones 5 { 6 // el método main comienza la ejecución del programa 7 public static void main( String args[] )
8 { 9 // arreglo unidimensional de calificaciones de estudiantes 10 int arregloCalif[] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 };
11 12 LibroCalificaciones miLibroCalificaciones = new LibroCalificaciones( 13 “CS101 Introduccion a la programacion en Java”,
arregloCalif ); 14 miLibroCalificaciones.mostrarMensaje(); 15 miLibroCalificaciones.procesarCalificaciones(); 16 } // fin de main
17 } // fin de la clase PruebaLibroCalificaciones Bienvenido al libro de calificaciones para CS101 Introduccion a la
programacion en Java! 284 Capítulo 7 Arreglos Las calificaciones son: Estudiante 1: 87 Estudiante 2: 68 Estudiante 3: 94
Estudiante 4: 100 Estudiante 5: 83 Estudiante 6: 78 Estudiante 7: 85 Estudiante 8: 91 Estudiante 9: 76 Estudiante 10: 87 El
promedio de la clase es 84.90 La calificacion mas baja es 68 La calificacion mas alta es 100 Distribucion de calificaciones: 00-
09: 10-19: 20-29: 30-39: 40-49: 50-59: 60-69: * 70-79: ** 80-89: **** 90-99: ** 100: * Figura 7.15 | PruebaLibroCalificaciones
crea un objeto LibroCalificaciones usando un arreglo de califi caciones, y después invoca al método procesarCalificaciones
para analizarlas. (Parte 2 de 2)

También podría gustarte