Curso básico de Java - #4 - Arrays y matrices

Buenas,
En este tema toca hablar de los Arrays (arreglos) y las Matrices como foras de almacenar varios datos en una sola variable.


Array
Un array permite manejar múltiples valores del mismo tipo como un solo elemento estructurado y ordenado.

Declaración

Sintaxis:

[tipo de dato][] [nombreVariable];

Ejemplos:

int[] numeros;     // Array de valores int.
char[] caracteres;    // Array de valores char.
String[] cadenas;  // Array de objetos String.
  • La Inicialización en los arrays es un poco inusual; podremos inicializar el array con sus valores predeterminados proporcionando el tamaño del array (0 o valor positivo), o, podremos proporcionar una lista de valores separados por comas que se asignaran a los elementos del array (solo cuando declaremos e inicialicemos en la misma linea).
Inicialización por tamaño

Sintaxis:

[tipo de dato][] [nombreVariable] = new [tipo de dato][[n]];
o
[array] = new [tipo de dato][[n]];

Esto creara un array del tamaño proporcionado (n) y les añadirá como valor a las posiciones el valor por defecto del tipo de dato. Ej: Si es tipo int, todos los elementos del array se inicializaran con el valor 0.

Ejemplos:

int[] numeros = new int[5];        // Array de 5 valores int.
char[] numeros = new char[10];     // Array de 10 valores char.
String[] numeros = new String[2];  // Array de 2 objetos String.
// o
int[] misNumeros;
misNumeros = new int[7];
Inicialización por valores

Sintaxis:

[tipo de dato][] [nombreVariable] = {[valor], [valor], ..., [valor]};

Recalco que solo es posible si se declara e inicializa en la misma linea. ¿Por que? No lo se.

Ejemplos:

int[] numeros = {10, -6, 1500, 0, -87}; // Array de 5 valores int.
char[] caracteres = {'a', 'b', 'c', 'd', 'e', 'f', ' ', '', '2', '\''}; // Array de 10 valores char.
String[] cadenas ={"Hola Mundo!", "Este curso está guapo he?"};  // Array de 2 objetos String.
Asignar valor a posición del array

Sintaxis:

[nombreArray][[posición]]  = [valor];

Se el valor a la posición proporcionada.

Ejemplos:

numeros[4] = 5;  // Inserta el valor 5 en la posición 4.
caracteres[6] = 'v';  // Inserta el valor 'v' en la posición 6.
cadenas[0] = "Hola Mundo!";  // Inserta el valor "Hola Mundo!" en la posición 0.
Devolver valor de una posición

Sintaxis:

[array][[posicion]];

Se devolverá el valor de la posición proporcionada.

Ejemplos:

numeros[4] // Devuelve 7.
caracteres[6] // Devuelve 'v'.
cadenas[0] // Devuelve "Hola Mundo!".

Las posiciones en los arrays
Esto es algo muy importante y a tener en cuenta:
Las posiciones de los elementos de un array empiezan por 0; eso quiere decir que la primera posición es la numero 0, la segunda la numero 1, la tercera la numero 2 y asi sucesivamente.
Por ejemplo:

int[] numeros = {10, 20, 30, 40, 50};
numeros[0] devuelve 10.
numeros[1] devuelve 20.
numeros[2] devuelve 30.
numeros[3] devuelve 40.
numeros[4] devuelve 50.

numeros[5] da error porque esa posición no existe, mucho cuidado con eso.

Matrices de arrays
Bueno, básicamente son arrays que guardan otros arrays.
Si a los arrays los consideramos como listas unidimensionales de elementos, una martiz (de arrays) son bidireccionales.
La lógica y la sintaxis son prácticamente idénticas:

Declaración

Sintaxis:

[tipo de dato][][] [nombreVariable];

Ejemplos:

int[][] numeros;     // Matriz de valores int.
char[][] caracteres;    //  Matriz de valores char.
String[][] cadenas;  //  Matriz de objetos String.
Inicialización por tamaño

Sintaxis:

[tipo de dato][][] [nombreVariable] = new [tipo de dato][[y]][[x]];
o
[matriz] = new [tipo de dato][[y][x]];

Ejemplos:

int[] numeros = new int[5][2];        // Matriz de de 5 columnas y 2 filas de valores int.
char[] caracteres = new char[10][5];     // Matriz de de 10 columnas y 5 filas de valores char.
String[] cadenas = new String[2][10];  // Matriz de de 2 columnas y 10 filas de objetos String.
// o
int[][] misNumeros;
misNumeros = new int[7][100];
Inicialización por valores

Sintaxis:

[tipo de dato][][] [nombreVariable] = {
    {[valor], [valor], ..., [valor]},
    ...,
    {[valor], [valor], ..., [valor]}
};

Recalco que solo es posible si se declara e inicializa en la misma linea. ¿Por que? No lo se.

Ejemplo:

int[][] numeros = {
    {10, -6, 1500, 0, -87},
    {0, 15, -10, 77, -1},
    {22, 777, 45, -27, 44},
};

*Las lineas (arrays) de una matriz no tienen que tener necesariamente el mismo numero de elementos.

Asignar valor a posición de la matriz

Sintaxis:

[matriz][[posiciónY]][[posiciónX]]  = [valor];
o
[matriz][[posiciónY]] = [array*];

Añadirá o actualizara el valor a la posición proporcionada.
* cuando queramos asignar una fila entera (un array) no podremos añadirlo de la siguiente manera: miMatriz[2] = {1, 2, 3};. Deberemos asignarle una variable de un array del mismo tipo y con el mismo numero de posiciones Y, o, algún elemento que devuelva un array del mismo tipo y con el mismo numero de posiciones Y.

Ejemplos:

numeros[4][0] = 5;  // Inserta el valor 5 en la posición 0 de la fila 4.
caracteres[6][5] = 'v';  // Inserta el valor 'v' en la posición 5 de la fila 6.
cadenas[0][0] = "Hola Mundo!";  // Inserta el valor "Hola Mundo!" en la posición 0 de la fila 0.
Devolver valor de una posición

Sintaxis:

[matriz][[posiciónY]][[posiciónX]]];
o
[matriz][[posiciónY]]; // Devolverá toda una linea en formato array.

De devolverá el valor de la posición proporcionada.

Ejemplos:

numeros[4][0] // Devuelve 7.
caracteres[6][5] // Devuelve 'v'.
cadenas[0] // Devuelve {"Hola Mundo!", "Este curso está guapo he?" }.

En un futuro tema hablaremos de la clase ArrayList que viene a ser unos arrays dinámicos que facilitan mucho la vida del programador (como siempre a cambio de algo de rendimiento).
Por lo pronto, en el siguiente tema hablaremos sobre Las clases Scanner y System.out como formas para comunicarnos con el usuario por la terminal y dando asi el paso a poder crear aplicaciones no deterministas.