Capítulo 2 ARREGLOS BIDIMENSIONALES Programación con java. En este Capítulo, aprenderemos a crear e implementar los arreglos bidimensionales o matrices, en el mantenimiento de libros de una pequeña biblioteca (registrar, listar, modificar y eliminar libros) Victor Garay 22/05/2015
1. ARREGLO BIDIMENSIONAL O MATRIZ
ARREGLOS EN JAVA 1.1. ¿Qué ES UN ARREGLO BIDIMENSIONAL?
“Un arreglo bidimensional es un conjunto de datos de un mismo tipo, finito y ordenado, que están almacenados en arreglos de dos dimensiones. Tiene una cantidad de filas y una cantidad de columnas. También puede definirse como un arreglo de arreglos.” Es común destacar que los arreglos de dos dimensiones se emplean para la construcción de tablas, en la cual están representadas por filas y columnas. En esta figura podemos apreciar, un arreglo bidimensional con 4 filas y 5 columnas. En este caso el nombre de la matriz es “NOTAS” y los valores están en los espacios congruentes entre una fila con una columna. Por ejemplo en posición fila3, columna2; se encuentra el valor numérico 9.
Al igual que los arreglos unidimensionales, los índices empiezan a partir de cero y se indican entre corchetes: [ ][ ]. El primer índice indica la fila y el segundo indica la columna.
Una matriz almacena elementos del mismo tipo. Una matriz es de tamaño fijo (mxn). Cada elemento se guarda en un espacio independiente. Cada espacio se referencia con dos índices. El primer índice referencia a las filas y el segundo a las columnas. Los índices que empiezan a contar a partir de 0.
1.2 Ejercicio mental:
Observa la siguiente figura y a través de su forma y contenido intente definir la matriz. Definiendo la matriz: Se trata de un arreglo bidimensional o matriz de dos dimensiones. La matriz está conformada por tres filas y de dos columnas. Por el contenido de caracteres (nombres), podemos decir que la matriz será de tipo de dato String.
Diga usted si es posible definir las siguientes representaciones de matriz:
1.3. ¿Cómo SE DEFINE UN ARREGLO BIDIMENSIONAL (Matriz) jercicio mental:
Al igual que los arreglos unidimensionales, se define con el tipo de dato, nombre de la matriz, instanciando la matriz y el tamaño de la matriz. TipoDeDato nombreMatriz[][] = new TipoDeDato[m][n];
Donde m es la cantidad de filas y n es la cantidad de columnas que tendrá nuestra matriz. Ejemplos: String nombres[][] = new String[3][2]; nombres[0] [0]=”Oscar”; nombres[0] [1]=”Sarah”; nombres[1] [0]=”Juan”; nombres[1] [1]=”Diana”; nombres[2] [0]=”Jhon”; nombres[2] [1]=”Andrea”;
double notas[][] = new double[50][4]; Aquí definimos un arreglo bidimensional de números reales, llamado “notas”, con 50 filas y 4 columnas. 1.4 Declarando e Inicializando una Matriz
Al igual que los arreglos unidimensionales, se puede declarar e inicializar una matriz. Ejemplos: String nombres[][] = {{“Víctor”, ”Garay”}, {”Brenda”, ”Martinez”} {”Karla”,”Martinez”}}; Estamos definiendo una matriz de cadenas de texto de 3 filas y 2 columnas.
double notas[][] = {{5.0, 4.0,5.0}, {4.3,4.7,3.8}, {2.7,3.2,4.0}, {4.3,4.7,5.0}};
Estamos definiendo una matriz de números reales 4 filas y 3 columnas.
Observe las siguientes gráficas e intente definir la matriz.
Respuesta:
int datos[ ][ ] = new int[6][4];
Respuesta:
int valores[ ][ ] = new int[6][2];
1.5 ¿Cómo SE GUARDA INFORMACION EN UNA MATRIZ?
Debemos de especificar la posición dentro de la matriz, en donde se desea guardar la información, indicando primero la fila y seguido de la columna. Ejemplo:
Observe la siguiente tabla de datos y proceda a guardar la información en las posiciones correspondiente a la tabla indicada.
Al ejecutar este proyecto nos mostrara una ventana de dialogo, en donde ingresaras el nombre indicado:
Al finalizar la ejecución de nuestro proyecto, no se mostrara nada, porque solo estamos ingresando información a nuestra matriz y dicha información se almaceno en la memoria, pero al terminar la ejecución del mismo se pierden dichos datos.
1.5 ¿Cómo LEER INFORMACION DE UNA MATRIZ?
Debemos de especificar la posición del elemento que se desea mostrar, indicando primero la fila y seguido de la columna. Continuando el proyecto anterior, proceda agregar las líneas de código tal como se muestra en la siguiente figura:
1.6 Guardar y Leer información mediante ciclos
Al igual que los arreglos unidimensionales, podemos realizar ingreso de información por un número determinado de veces y asimismo mostrar la información ingresada. Para esta tarea se emplea la instrucción de ciclo repetitivo For(). Ejemplo Practico Nº01. No piden elaborar un programa, que permite el ingreso del código de matrícula y los nombres de un conjunto m de alumnos. Al final nos muestre en una ventana el listado de los alumnos ingresados. Análisis 01.
Como el ingreso de los datos es para “m” alumnos, entonces, tenemos que saber el número de alumnos a ingresar, para saber cuántas filas tendrá nuestra matriz. El ingreso de datos de los alumnos será para su código de matrícula y sus nombres, entonces nuestra matriz será de dos columnas y “m” filas, es decir (mx2). Como la matriz tendrá dos columnas: una para el código de matrícula (String) y otra para los nombres (String), entonces nuestra matriz será de tipo String y de tamaño (mx2) y tendrá la siguiente gráfica: filas 0 1 2 3 m
columnas 0 1 101-2015-CI-2 “Victor Garay” 102-2015-CI-2 “Brenda Martinez” . . . . m M
El control del ingreso y la salida de la información se hará a través del ciclo repetitivo for(). Para la presentación del listado de alumnos emplearemos el objeto JTextArea().
Programa codificado en Java.
1. Como el número de ingresos de los alumnos, lo ingresara el usuario, entonces es necesario definir la estructura de nuestra matriz sin instanciarla y en vacío.
2. Declaramos las variable que guardara el número de veces a repetir el for() y la variable salida que guardara la información producto del recorrido del for().
3. Ahora procedemos a ingresar el número del tamaño que tendrá nuestra matriz e instanciamos nuestra matriz.
4. Seguidamente ingresamos el número de matrícula y los nombres de los alumnos que serán controlado por el for().
5. A continuación construimos la cabecera del título para el listado de los alumnos que tendrá la siguiente presentación: Orden
Código
Nombres
Nota: recuerda que el \n\n provoca dos líneas en blanco y el \t provoca un salto de tabulación.
6. Seguidamente procedemos a recorrer nuestra matriz, a fin de leer los datos de cada elemento de la matriz y guardarlas en la variable “salida”.
7. En este punto la variable “salida” contiene los datos de los alumnos fila x fila y procedemos a mostrarlos dentro del objeto JTextArea().
Ejecuta tu proyecto y modifica el código a fin que amplíes los campos de la matriz como: dirección, teléfono, email, entre otros.
Ejemplo Practico Nº02. Se requiere una aplicación en java, que permita almacenar los resultados de las elecciones municipales, en el distrito de El Agustino. Existen 03 candidatos y el distrito esta sectorizado en 04 sedes y los votos deben registrase en una matriz, tal como se muestra en la siguiente figura:
Cada fila de la matriz corresponde a las sedes. Cada columna de la matriz corresponde a un candidato La aplicación debe mostrar el ganador de acuerdo a los votos obtenidos.
1. Iniciamos definiendo las matrices para los candidatos, sedes y los votos de las elecciones. Asimismo las variables para las filas y columnas.
2. Definimos e instanciamos el nuevo objeto “área” del tipo JTextArea(), en donde se visualizaran los resultados de los votos. Así como también el nuevo objeto “scroll” de tipo JScrollPane() del tamaño de “area”.
3. Seguidamente procedemos a ingresar el número de las sedes de votaciones y lo guardamos en la variable “fil” y definimos el tamaño de “sedes” con el valor de “fil”. De esta manera estamos definiendo el tamaño de la matriz “sede” con el número que ingresa el usuario.
4. Procedemos a ingresar el nombre para cada sede de votación, esto lo logramos mediante el uso del for(), para generar un bucle repetitivo hasta el número de sedes ingresado líneas arriba y guardado en “fil”.
5. Seguidamente ingresamos el número de candidatos y lo guardamos en la variable “col” e instanciamos a matriz candidatos con el tamaño de “col”.
6. Ahora definimos el tamaño de la matriz “votos” con el número de filas y columnas de las variables “fil” y “col”.
7. A continuación emplearemos el for() para ingresar los votos de los candidatos por cada sede.
8. En este punto tenemos el número de candidatos, sedes y los obtenidos de los candidatos por cada sede, ahora procedemos a calcular y guardar el total de votos.
9. Y atenemos los votos obtenidos, procedamos a calcular los votos mayores a fin de hallar al candidato con mayor votación.
10. Por ultimo mostramos el resultado general obtenido de las votaciones y los votos por cada sede y candidatos. Estos datos serán mostrados dentro de “área” que representa al JTextArea() y este a su vez se mostrara en la ventana de dialogo controlado por JOptionPane.showMessageDialog().
Ejemplo Practico Nº03 (Caso de una pequeña biblioteca). La biblioteca “The Center Book”, ubicado en el parque triangular de la urb. La corporación del distrito de El Agustino, lleva el control del registro de sus libros en la biblioteca, de forma manual, la cual hace tedioso el proceso del registro, búsqueda, mantenimiento de los libros. Este proceso se realiza en papel. El consejo directivo nos ha encargado sistematizar dicho registro a fin de poder tener una mejor atención a los diferentes usuarios.
Consideraciones Generales: 1.
Nuestro proyecto contara con un menú principal de opciones, que permitirá a que el usuario pueda agregar libros, mostrar un listado de los libros, eliminar un libro, modificar los datos de un libro y tendrá la siguiente presentación.
2. Agregar Libros, mostrara una ventana de dialogo, que permitirá el registro de un libro nuevo en nuestra matriz y tendrá la siguiente presentación:
Para el ingreso de los demás campos del libro, se emplearan ventanas similares a esta presentación.
3. Mostrar Libros, muestra una ventana de dialogo con un listado general de todos los libros existente en nuestra matriz:
4. Elimina libro x nombre, esta opción permitirá eliminar un libro a través de su título, para ello deberá de mostrar un listado de los libros existentes y seguidamente mostrar una ventana pidiéndonos el nombre del título del libro a elimina, tal como se muestra en la siguiente figura: Luego mostrara una ventana con los datos del título del libro eliminado. Seguidamente una ventana confirmando que la eliminación del libro se realizó exitosamente. Por ultimo mostrara el listado de libros para que el usuario visualice que el libro ya no esta registrado.
5. Modificar libro x el código, como su nombre lo indica, esta opción permite modificar los datos de un determinado libro, a través del código del libro y tendrá las siguientes ventanas: Primero debe mostrar el listado de libros a fin que el usuario verifique el código del libro que se desea modificar. Luego el proyecto debe de mostrar una ventana en donde nos solicite el código del libro a modificar.
A continuación debe mostrar una ventana que nos permite seleccionar el campo del libro que se desea modificar.
Según el campo seleccionado (1–6), deberá solicitarnos el nuevo dato la cual reemplazar al existente en nuestra matriz.
En este momento nuestra aplicación, nos mostrar una ventana indicándonos un mensaje de confirmación de la modificación exitosa.
Por ultimo deberá de mostrarse nuevamente el listado de libros a fin que el usurio pueda observar la modificación del campo seleccionado.
Análisis e implementación del proyecto. Después del estudio correspondiente, se llegó a la conclusión de implementar un arreglo bidimensional (matriz) para el registro y mantenimiento de los libros, la cual desarrollamos a continuación: 1. Estructura del arreglo. 2. Se contara con un arreglo bidimensional principal, para registrar los libros (MatrziLibros), la cual manejara los siguientes campos: código del libro, título del libro, autor del libro, editorial del libro, año de edición, tipo del libro, cantidad de páginas del libro. Asimismo las demás variables que permitirán el correcto funcionamiento del programa.
3. Definiendo el main() principal del proyecto Llamamos a los métodos “AgregarDatos()” y “MenuOpciones()”, que permiten inicializar y mostrar la ventana principal respectivamente (aun no implementadas).
4. Presentación. Tal como explicamos en las consideraciones generales, nuestro proyecto tendrá una ventana principal de opciones. Esta ventana estará controlada por un método llamado “MenuOpciones()” y tendrá la siguiente presentación:
Recuerda: Que, hasta este punto, el único método implementado es MenuOpciones(), por tal motivo en la línea 24 se debe colocar los backslash para que AgregarDatos() quede momentáneamente como comentario. Seguidamente podrás ejecutar el proyecto y se mostrara la ventana con el menú de opciones, pero recuerda que, si seleccionas alguna opción, saldrá error, debido a que aún no se ha implementado los demás métodos: IngresoLibros(), MuestraLibros(), Eliminareg(), ModificaLibro().
5. Inicializar y agregar datos a los arreglos. Una vez definida nuestro arreglo principal, debemos de inicializarlos con datos, los cuales deben ser cargados al momento de la ejecuci贸n de nuestro proyecto.
6. Método BuscarCodigo() 7. Este método, permite buscar un código dentro de nuestra matriz. La búsqueda se realizara desde la posición 0 (i=0), hasta la última posición de la matriz (i < MatrizLibros.length) controlada por la sentencia repetitiva for() indicada en la línea 97 de nuestro proyecto.
8. Luego compara si el código ingresado (CodigoLibro), es igual al contenido de las posiciones de la matriz (línea 99). Entonces la variable ExisteCodigo toma el valor de verdadero y la variable PosicionLibro toma el valor de i (número de fila actual dentro de la matriz)
9. De lo contrario (else), quiere decir que el código ingresado no es igual a los datos de las posiciones de nuestra matriz, la variable ExisteCodigo toma el valor de falso y PosicionLibro toma el valor de -1 (es decir 0 la primera fila de la matriz, porque no encontró al código a buscar).
Código completo:
10. Método IngreseNvoLibro() La finalidad de este método es controlar la toma de decisiones para registrar más libros. Muestra una ventana en donde el usuario ingresara el código del libro a registrar y se guarda en la variable otroLibro (línea 109).
Comparamos si la respuesta del usuario fue “S” (línea 111), entonces llama al método IngresoLibros() que permite registrar los demás datos del libro y guardarlos en los campos de nuestra matriz (línea 112).
De lo contrario (else), se refiere a que la repuesta es diferente a “S”, llamara y mostrara el menú principal de opciones (línea 114).
Código completo:
11. Implementando la opcion1: Agregar libros - Método IngreseNvoLibro() Es la primera opción dentro de nuestra ventana principal de opciones. Se emplea para que el usuario pueda registrar libros nuevos a la matriz. Se empleara una variable inicioInsercion (línea 119) que más adelante tomara el valor de la fila libre o disponible, en donde se guardara los campos de libro a ingresar e inmediatamente se le pedirá al usuario que ingrese el código del libro a registrar y dicho código se guardara en la variable otroLibro (linea 121).
Luego de ingresar el código el libro que se desea registrar, nuestro proyecto debe de verificar si el código ingresado existe en la matriz, para llamamos al método BuscaCodigo() que ya se explicó en la línea 96 hasta la línea 105.
Si el código existe (línea 125), que muestre los datos del libro existente (línea 127) y luego nos pregunte si deseamos continuar registrando otro libro, llamando al método IngreseNvoLibro() (línea 132)
De lo contrario (else), que nos pida los campos del libro a registrar: título, autor, editorial, año, especialidad, número de páginas (línea 133 hasta 140).
En este punto, el usuario ingreso los campos del libro y se guarda en las variables correspondientes, ahora procedemos a buscar una FILA disponible en nuestra matriz, a fin de poder guardar en ella los campos del libro ingresado. El for() permitirá hacer un recorrido en nuestra matriz (línea 142) y comparamos si dicha posición esta vacía (línea 143), si es verdadera, entonces que la variable InicioInsercion tomara el valor de i, quien contiene el valor de la fila disponible (línea 144).
Una vez que hemos hallado el valor de la FILA libre o disponible, procedemos a guardar los datos de las variables en dicha FILA (línea 148 hasta 154) e inmediatamente invocaos a nuestro método IngreseNvoLibro() para que el usuario decida seguir registrando más libros (línea 157).
Código completo:
12. Implementando la opcion2: Mostrar libros - Método MuestraLibros() Aquí, el usuario podrá observar un listado de todos los libros registrados en nuestra matriz. Este método define u objeto llamado “area”, que se instancia de la clase JTextArea(), que recibirá los datos de los libros para mostrarlos en el área de texto, dentro de una ventana(línea 162). Asimismo definimos a un objeto llamado “scroll”, que se instancia de la clase JScrollPane(), que contendrá los datos existentes en el objeto “area”(linea 163).
Seguidamente procedemos agregar la cabecera del listado de libros, al objeto “area”.
Hasta este punto, ya contamos con nuestro objeto “area”, que esta almacenando la cabecera del listado y asimismo se mostrara dentro de un control JScrollPane. Debemos de agregar los datos (campos) de los libros al objeto “area”, haciendo un recorrido de la matriz (línea 171 hasta 180).
Una vez iniciado el recorrido de nuestra matriz, debemos de comparar que la posición en matriz del campo código se encuentra vacío, que no haga nada (línea 172,173).
De lo contrario (else) quiere decir que existe información en la columna del código, que agregue los datos encontrados en dicha FILA (i lleva el contador de filas) de la matriz hacia nuestro objeto “area”.
En este punto nos detenemos, para analizar lo que hemos realizado. Tenemos a nuestro objeto “area” que se agregado cabecera del título, los datos de los libros. Ahora después del recorrido de nuestra matriz, debemos de agregar una línea horizontal (línea 182). Por ultimo ya nuestro objeto tiene toda los datos de los libros y debemos de mostrarlo en una ventana y para ello lo hacemos mediante el objeto “scroll” que habíamos instanciado de la clase JScrollPane(área) (línea 163), esto quiere decir que todo lo de “area” se encuentra en “scroll” y lo mostramos en una ventana de dialogo (línea 184).
Código completo:
13. Implementando la opcion3: Eliminar libro x nombre - Método Eliminareg() Para la implementación de este método, debemos de tener en cuenta las siguientes consideraciones:
Que en primera instancia, el usuario pueda observar el listado de los libros registrados (llamar al método Muestralibros()). Luego que el proyecto solicite el nombre del título del libro que se desea eliminar. Seguidamente busque el nombre del título del libro en nuestra matriz. Una vez localizada, que muestre los datos del libro, con el mensaje “El libro fue eliminado con éxito…”
¿Si deseas el resto de los métodos que complementan el mantenimiento de la Biblioteca? ¿Si deseas el documento completo en formato Word (.doc) y en acrobat (.pdf) ¿Si deseas los códigos fuente en java de los programas ejemplos en el presente manual, que incluye otro proyecto completo de aplicación? Deposita la cantidad de S/.50.00 soles a la cuenta del Banco Continental Nº 0011-0269-0200159598-88 Victor Garay Yauri. Confirma el depósito o cualquier consulta hazla a los siguientes correos electrónicos: vgaraysoft@hotmail.com gyaurivictorher@crece.uss.edu.pe vgaraysoft@yahoo.com