sábado, 14 de julio de 2012

3.2.1 Arreglo de 2 dimensiones


¿Que es un arreglo de dos dimensiones?
Un arreglo de dos dimensiones es una colección de datos para una misma variable en dos dimensiones comúnmente llamados renglones y columnas.

Arreglo
12
-4
0
28
-3
-3
-5
2
189
-2
1
0
9
-4
12
Para poder guardar un valor u obtener alguno del arreglo de dos dimensiones (también llamado matriz) es ahora necesario utilizar dos dimensiones, el renglón y la columna.

Declaración de arreglos de dos dimensiones
Para declarar un arreglo de dos dimensiones se utiliza el siguiente formato:
tipo nombre_arreglo [][] = new tipo[ numero renglones][ numero columnas];
donde tipo es el tipo de los datos que almacenará el arreglo de dos dimensiones. Es importante recordar que se pueden declarar arreglos de los tipos primitivos de Java (int, double, char, etc) o bien de tipos definidos por el usuario (Cuenta, Alumno, etc).
Tamaño representa la cantidad de casillas que se reservan para el arreglo. En Java todos los arreglos empiezan en el subíndice 0 y llegan al subíndice tamaño-1.
Por ejemplo:
int arr[][] = new int[5] [6];   // arreglo de 5 renglones y 6 columnas enteros
char cad[][] = new char[10] [5]; // arreglo de 10 renglones por 5 columnas tipo carácter
Uso e inicialización de los elementos del arreglo de dos dimensiones
Para usar los elementos individuales de un arreglo se usa el siguiente formato:
arreglo[subíndice-renglon] [subíndice-columna]
Como un elemento de un arreglo de dos dimensiones es también un dato, se puede usar como cualquier variable de ese tipo, debemos recordar que tanto el índice de renglón como el índice de columna toman como base el primer elemento cero:
int arr[][] = new int [2][5];
arr[3][4] = 12;
arr[1][0]= Integer.parseInt(t1.getText());
t2.setText("" + arr[0][1]);
arr[0][0] = arr[0][1] + arr[0][2];
int k = 2;
int l = 3
arr[k+1][l] = 20;
Ejemplo:
En este siguiente ejemplo, tenemos una aplicación que define un arreglo de enteros de dos dimensiones, con 3 renglones y 5 columnas, y los inicializa con el valor de 1 a 15, de acuerdo a cada renglón, empezando por 1 en el renglón 1, luego por 6 en el renglón 2 y 11 en el renglón 3. Después de inicializar la matriz, la despliega, desplegando los valores de un mismo renglón en la misma línea, como lo muestra la figura:
La aplicación es como se muestra a continuación:

public class AplicacionMatrices1 {
public static void main(String[] args) {
int arreglo[][] = new int [3][5];
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++) {
arreglo [i][j] = i*5+j+1;
}
}
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++) {
System.out.print(" " + arreglo[i][j] + " ");
}
System.out.println();
}
}
}



Inicializar matriz en la declaración
En Java es posible inicializar una matriz al declararla, tal y como sucede con los arreglos; esto se hace sin definir el número de renglones y columnas, colocando un operador de asignación y después entre llaves la lista de valores para cada renglón del arreglo, el arreglo separando con llaves para cada valor por columna, separado por comas, veamos los siguientes ejemplos:
double arreglo[][] = { {3.5, 5.4, -2.3 }, {22.3, 78.5, -9.4}};
char cadena[][] = {{‘a’, ‘g’, ‘u’, ‘a’}, {‘r’, ‘o’, ‘j’, ‘a’}} ;
En Java es posible saber el número de renglones de una matriz, solo escribiendo el nombre de la matriz un punto y la palabra length, también se puede saber el número de elementos de un renglón, dando el nombre del arreglo , el renglón entre corchetes y un punto y la palabra length, como se muestra en el siguiente ejemplo:

public class AplicacionMatrices2 {
public static void main(String[] args) {
int arreglo[][] = {{1,2,3}, {4,5,6}, {7,8,9}};
for (int i=0; i<arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
System.out.print(" " + arreglo[i][j] + " ");
}
System.out.println();
}
}
}

El cual al ejecutar mostrará lo siguiente:
Es importante observar como se escriben los renglones por columna, recordando que se utiliza el print() para desplegar el valor, esto permitirá no cambiar de renglón, pero tampoco saldrá a la pantalla hasta encontrar un println(), el cual se hace después del ciclo de adentro que despliega todos los renglones de una columna.
Ahora vamos a observar como se pueden introducir los datos para meterlos a una matriz en una aplicación, debemos observar que hay un nuevo objeto que es creado que lo hemos llamado in, por input, ya que es un objeto que es de entrada de datos, este objeto es de la clase BufferedReader, la cual nos ayuda a tomar datos en forma de carácter de un InputStreamReader, el cual toma todo los datos que vienen de consola al usar System.in, observemos la aplicación:
import java.io.*;

public class AplicacionMatrices3 {
public static void main(String[] args) throws IOException {
int arreglo[][] = new int[3][3];
// definiendo un objeto de entrada para tomar datos del teclado
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
// pidiendo los datos del teclado
for (int i=0; i<arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
System.out.print("Da elemento " + (i+1)+ " , " + (j+1) + " : ");
arreglo[i][j] = Integer.parseInt(in.readLine());
}
System.out.println();
}
//desplegando los valores por renglon
for (int i=0; i<arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
System.out.print(" " + arreglo[i][j] + " ");
}
System.out.println();
}
}
}

La cual se visualiza asi:
  
Esta aplicación utiliza primero un ciclo anidado (un ciclo dentro de otro ciclo) para pedir los datos, utilizando para ello el objeto in, el objeto in no se te explicará en este momento su uso, solo debes utilizar el objeto tal y como esta declarado y cada vez que quieras leer algo del teclado utilizar in.readLine(), esto substituye al t.getText() de un applet, por eso tenemos
arreglo[i][j] = Integer.parseInt(in.readLine());
ya que estamos tomando lo que se leyo del teclado, se pasa a entero, ayudándonos por la clase Integer y finalmente se asigna esto en la matriz arreglo dentro del renglón (i-1) columna (j-1).
Usando mal los Índices
Al igual que en un arreglo, cuando utilizamos mal los índices de una matriz, Java arroja un error de ejecución llamado de excepción, el cual es ArrayIndexOutOfBoundsException, debemos tener cuidado en esto, pues la aplicación se cancela y no continua, como se muestra en la siguiente aplicación:

import java.io.*;

public class AplicacionMatrices4 {
public static void main(String[] args) throws IOException {
int arreglo[][] = new int[3][3];
// definiendo un objeto de entrada para tomar datos del teclado
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
// pidiendo los datos del teclado
for (int i=0; i<arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
System.out.print("Da elemento " + (i+1)+ " , " + (j+1) + " : ");
arreglo[i][j] = Integer.parseInt(in.readLine());
}
System.out.println();
}
//desplegando los valores por renglon
for (int i=0; i<4; i++) {
for (int j=0; j<3; j++) {
System.out.print(" " + arreglo[i][j] + " ");
}
System.out.println();
}
}
}

La ejecución que muestra la aplicación es:
Podemos observar como la aplicación alcanza a mostrar todos los renglones desplegados, pero como queremos continuar con el renglón 3, el cual no existe pues el último fue 2 (empezando en cero), arroja la excepciónArrayIndexOutofBoundsException.

No hay comentarios:

Publicar un comentario