INACAP Universidad Tecnológica de Chile Sede Santiago Centro Taller de Programación I Curso Java J2SE Tema 04: Arreglos y Matrices en Java Ing. Manuel López Ramos (versión 2) Parte I Arreglos en Java Arreglos en Java Un arreglo es una estructura de datos lineal, que puede almacenar 1 ó más datos, y que presenta sólo una dimensión (1 dimensión = largo). ● Posiciones de datos variable Celdas de datos referencia Los datos de un arreglo se almacenan en celdas de memoria, de manera contigua. A cada celda se le asigna un número entero que indica la posición de un dato con respecto a los demás. ● ● La primera posición es la cero; la última posición es igual al largo del arreglo menos 1. Los arreglos, al igual que los strings, tienen una propiedad fundamental: su largo o cantidad de celdas de datos. a) primera posición del arreglo = 0 b) última posición del arreglo = largo del arreglo - 1 Arreglos en Java ● Los arreglos sólo pueden almacenar datos de un sólo tipo primitivo o de un sólo tipo de objetos. Para definir un arreglo se debe indicar: el tipo de todos sus datos, la cantidad de celdas de memoria (o posiciones) a generar y un nombre de variable. Para crear las celdas se utiliza la palabra clave new. ● Los arreglos son tipos de datos para los cuales, una vez definido el largo del arreglo, éste no puede ser modificado con posterioridad -> arreglos de largo no modificable ● arreglo nulo a) Forma de C: int arrDatos[]; // sólo declaración char arrLetras[] = new char[4]; b) Forma de Java: int[] arrDatos = new int[5]; float[] notasCurso = new float[6]; Arreglos en Java Para inicializar un arreglo, basta con definir sus elementos entre llaves, separados con comas. Esto automáticamente crea celdas de datos para cada elemento. ● int[] arrDatos = {9, 8, 7, 6, 5}; float[] notasCurso = {4.0F, 1.0F, 6.5F, 5.5F, 7.0F, 4.5F}; boolean[] estadoPersonaje = {false, true}; Arreglos en Java Diferentes formas de declaración y definición de arreglos: notar que los arreglos también utilizan la notación de referencias para unir la variable con el espacio para datos. ● int[] arrDatos; int[] arrDatos = null; arreglo nulo (sin espacio para datos) int[] arrDatos = new int[5]; espacio de datos inicializado con ceros int[] arrDatos = {9, 8, 7, 6, 5}; espacio con datos inicializados explícitamente Arreglos en Java Arreglos de strings (o de cualquier objeto): notar que para un arreglo de objetos (por ejemplo de strings) la notación gráfica de referencias indica cuatro elementos: ● ● ● ● ● ● la variable la referencia de la variable al espacio de datos el espacio de datos (que contiene referencias a 1 ó varios strings) los strings, en otras celdas de memoria. Por ejemplo,recordando cómo se representaba una variable de string, se tiene que: String frase3 = "Buenas noches!"; String[] diccionario = {"árbol", "barco", "casa", "dado", "e"}; Arreglos en Java Para almacenar un nuevo dato en el arreglo, se debe indicar el nombre del arreglo, la posición a utilizar y el nuevo dato a almacenar. ● int[] arrDatos = {9, 8, 7, 6, 5}; arrDatos[3] = 45; posición de la celda a utilizar arrDatos[1] = -234; nuevo dato a almacenar Arreglos en Java Para utilizar un dato de un arreglo basta con indicar el nombre del arreglo y la posición que se requiera. ● int total = arrDatos[0] + arrDatos[2] * 3 - arrDatos[4]; arrDatos[2] = arrDatos[0] - total; Parte II Matrices en Java Matrices en Java Las matrices son estructuras de datos derivadas de los arreglos, que puede almacenar 1 ó más datos, y que presentan dos ó más dimensiones (largo, ancho, profundidad, etc.) Las más populares son las de 2 y 3 dimensiones, aunque pueden existir matrices con más dimensiones, si así se requiere. Posiciones de columna ● variable referencia Celdas de datos Posiciones de fila En cada dimensión, la primera posición es la cero; la última posición de cada dimensión es igual al largo de la dimensión menos 1. ● Matrices en Java Las matrices, al igual que los arreglos, sólo pueden almacenar datos de un sólo tipo primitivo o de un sólo tipo de objetos y su tamaño, una vez definido, no se puede modificar, a menos que se desee perder todos los datos ya almacenados en ella. ● Si sólo se declara una matriz, su inicialización por defecto será hecha con el valor null. ● a) Forma de Java: matriz nula int[][] matDatos; int[][] matDatos = null; int[][] matDatos = new int[3][5]; columnas filas Matrices en Java Para inicializar una matriz, basta con definir sus elementos entre llaves, separados con comas. La inicialización consta de los siguientes elementos: ● ● ● ● un par de llaves externas para definir toda la matriz pares de llaves internas para definir filas de la matriz, según la cantidad de dimensiones que tenga la estructura. Por ejemplo, para una matriz de 3 filas x 5 columnas (2 dimensiones), se define lo siguiente: int[][] matDatos = { { 4, -1, 5, 0, 9 }, // Fila 0 { 292, 12, -34, 67, -8 }, // Fila 1 { 45, 0, 0, 0, 1} // Fila 2 }; Matrices en Java Para almacenar un nuevo dato en la matriz, se debe indicar el nombre de la matriz, la posición a utilizar (con una coordenada de N valores para N dimensiones) y el nuevo dato a almacenar. ● int[][] matDatos = { { 4, -1, 5, 0, 9 }, { 292, 12, -34, 67, -8 }, { 45, 0, 0, 0, 1} }; posición de fila-columna matDatos[2][3] = -10; nuevo dato a almacenar Matrices en Java Para leer un dato de la matriz y utilizarlo, se especifican sus coordenadas de fila-columna dentro de una expresión aritmética u operatoria de objetos. ● int[][] matDatos = { { 4, -1, 5, 0, 9 }, { 292, 12, -34, 67, -8 }, { 45, 0, 0, -10, 1} }; System.out.println( matDatos[2][3] + matDatos[1][2] ); + Matrices en Java Nota importante: la representación de matrices utilizada en las diapositivas anteriores puede ser considerada como una simplificación, debido a que la forma real define cada una de las filas como independiente de las demás (como lo indica el diagrama siguiente): ● La independencia de las filas permite inclusive crear matrices con filas de diferente tamaño (por ejemplo, la fila 0 con 5 celdas, la fila 1 con 20 celdas y la fila 2 con 100 celdas, todas dentro de la misma matriz). ● Propiedades de los arreglos y matrices (en Java) ● Notas importantes: 1.- La cantidad de elementos del arreglo (el largo) de arr1 es igual a: largoArreglo = arr1.length() 2.- La cantidad de filas de la matriz mat1 es igual a: totalFilas = mat1.length() 3.- La cantidad de columnas de la fila nF de la matriz mat1 es igual a: totalCols = mat1[nF].length() NOTA: para una matriz rectangular, la cantidad de columnas de cada fila es igual a: totalCols = mat1[0].length()