You are on page 1of 79

Fundamentos de Java

6-1:
Matrices

Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados.
Objetivos

Esta leccin abarca los siguientes temas:


Escribir una matriz unidimensional en un programa Java
usando tipos de datos primitivos
Escribir una matriz unidimensional en un programa Java
usando tipos de referencia (objetos)
Escribir una matriz bidimensional en un programa Java
usando tipos de datos primitivos
Escribir una matriz bidimensional en un programa Java
usando tipos de referencia (objetos)
Declarar, inicializar y desviar una matriz

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 3
Matrices
Descripcin general

Esta leccin abarca los siguientes temas:


Describir la inicializacin de la matriz
Distinguir entre el mtodo length() de String y el valor de
longitud de la matriz
Reescribir un programa Java para almacenar enteros en una
matriz, realizar un clculo matemtico y mostrar el resultado
Usar sintaxis alternativas de declaracin de matrices

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 4
Matrices
Qu es una matriz?

Una matriz es una coleccin de valores del mismo tipo de


datos almacenados en un objeto contenedor.
Puede ser cualquier nmero de valores.
Cuando se declara la matriz se establece su longitud.
Una vez que se declara la matriz, se establece su tamao.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 5
Matrices
Elementos de la matriz

Cada valor se denomina elemento


Se accede a cada elemento mediante un ndice.
El ndice debe ser un entero.
El ndice siempre comienza en 0.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 6
Matrices
Tipos de datos de las matrices

Las matrices pueden contener cualquier tipo de datos, como


los siguientes:
Primitivos
Objetos predefinidos, como Strings de las API de Java
Objetos definidos por programadores, como las instancias de la clase
que usted cree.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 7
Matrices
Declaracin de una matriz

La declaracin de una matriz consta de tres partes:


Tipo de datos
Nombre de la variable
Tamao de la matriz

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 8
Matrices
Ejemplos de declaracin de una matriz

La declaracin de una matriz se puede realizar en una o dos


lneas.
Ambos ejemplos a continuacin son equivalentes a
declaraciones de matrices.
data_type[] variable_name;
variable_name = new data_type[size];
//declare an array using two lines of code

data_type[] variable_name = new data_type[size];


//declare an array using one line of code

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 9
Matrices
Ejemplo de declaracin de una matriz

Un amigo le trae un ramo de seis flores diferentes.


Desea escribir un programa para almacenar cada tipo de flor
en el ramo.
Los segmentos del cdigo a continuacin son formas idnticas
de declarar una matriz de Strings denominada myBouquet.
El tamao se establece para seis elementos, de modo que
puede almacenar cada tipo de flor en su ramo.
String[] myBouquet;
myBouquet = new String[6];

String[] myBouquet = new String[6];

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 10
Matrices
Explicacin del ejemplo de matriz
myBouquet

String[] myBouquet;
myBouquet = new String[6];

String[] myBouquet = new String[6];

El tipo de datos El tamao de la


El nombre de la matriz es de 6
almacena los tipos
matriz es elementos, uno
de flores como
myBouquet. para cada flor.
Strings.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 11
Matrices
Identificar los componentes de la
declaracin de una matriz

Identificar los tres componentes de la declaracin de una


matriz para cada una de estas matrices de tipos de datos
primitivos.
int[] myArray;
myArray = new int[20];

char[] sentence = new char[100];

double[] teamPoints = new double[5];

Tipo de datos
Nombre
Tamao

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 12
Matrices
Sintaxis alternativa de la declaracin de
matrices

Una manera alternativa de declarar las matrices es posicionar


los corchetes utilizados para declarar una matriz a cada lado
del identificador de la matriz.
Sintaxis presentada: Sintaxis alternativa:
int[] primeNumbers; int primeNumbers[];
int[] evenNumbers; int evenNumbers[];
double[][] prices; double prices[][];
String[] words; String words[];
Point[] coordinates; Point coordinates[];
Rectangle[][] blocks; Rectangle blocks[][];

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 13
Matrices
Sintaxis alternativa de declaracin de
matrices

Cualquiera de las declaraciones funciona.


La sintaxis alternativa es similar a la que se utiliza en lenguaje
C.
La sintaxis utilizada para presentar matrices en realidad se lee
de manera ms clara.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 14
Matrices
Sintaxis alternativa de declaracin de
matrices

La primera lnea se leer Matriz de enteros primeNumbers.


Sintaxis presentada: Sintaxis alternativa:
int[] primeNumbers; int primeNumbers[];
int[] evenNumbers; int evenNumbers[];
double[][] prices; double prices[][];
String[] words; String words[];
Point[] coordinates; Point coordinates[];
Rectangle[][] blocks; Rectangle blocks[][];

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 15
Matrices
Inicializacin de una matriz

Una vez que declara una matriz debe inicializarla para


establecer los valores de los ndices especificados.
La inicializacin de una matriz consta de tres componentes:
Nombre de la variable
ndice
Valor

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 16
Matrices
Formas de inicializacin de una matriz

Una matriz se puede inicializar de dos maneras diferentes:


Declare la matriz, luego inicialice cada elemento.
Realice la declaracin y la inicializacin en el mismo paso.

Ejemplo de declaracin e inicializacin en dos pasos:


data_type[] variable_name = new data_type[size];
variable_name[index] = value; //repeat for each index

Ejemplo de declaracin e inicializacin en un paso:


data_type[] variable_name = {val1, val2, };

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 17
Matrices
Ejemplo 1 de inicializacin de una matriz
Recuerde la declaracin de la matriz del String myBouquet.
Una vez declarada la matriz, el cdigo a continuacin inicializa
los elementos y almacena los tipos de flores.
El ndice de una matriz comienza en 0, de modo que el primer
elemento se agrega al ndice 0.
String[] myBouquet = new String[6]; //previous declaration
myBouquet[0] = "Rose"; //Store "Rose" as the first element
myBouquet[1] = "Sunflower"; //Store "Sunflower" as the second
myBouquet[2] = "Daisy"; //and so on
myBouquet[3] = "Dandelion";
myBouquet[4] = "Violet";
myBouquet[5] = "Lily"; //"Lily" is the last (sixth) element

Nombre de la ndice Valor


variable

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 18
Matrices
Ejemplo 1 de inicializacin de una matriz

La matriz de tipos de flores se ver de la siguiente manera:


ndice: 0 1 2 3 4 5
Diente de
Valor: Rosa Girasol Margarita Violeta Lirio
len

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 19
Matrices
Ejemplo 2 de inicializacin de una matriz

La matriz myBouquet tambin se puede declarar e inicializar


utilizando la segunda notacin de la siguiente manera:
String[] myBouquet = {"Rose", "Sunflower", "Eucalyptus", "Dandelion",
"Violet", "Lily"};

Observe que al usar este mtodo no se especifica el tamao,


pero se asigna un tamao en base a la cantidad de elementos
de la lista entre corchetes "{}".

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 20
Matrices
Primera notacin frente a la segunda
notacin

Aparentemente la codificacin de la segunda notacin es


mucho ms corta y sencilla.
Por qu necesitar la primera notacin?

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 21
Matrices
Primera notacin frente a la segunda
notacin

Considere tomar cinco nmeros de un usuario y almacenarlos


en una matriz denominada myArray.
Necesitar declarar la matriz, luego inicializar los elementos
de a uno por vez, a medida que el usuario ingrese cada
nmero.
int[] myArray = new int[5]; //Declare the array of size 5
MyArray[0] = 7; //The user entered 7
MyArray[1] = 24; //The user entered 24
MyArray[2] = 352; //The user entered 352
MyArray[3] = 2; //The user entered 2
MyArray[4] = 37; //The user entered 37

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 22
Matrices
Primera notacin frente a la segunda
notacin

Es posible que la segunda notacin aparentemente refleje


una manera ms sencilla de inicializar la matriz, si ya conoce
el contenido de la matriz al declararlo.
int[] myArray = {7, 24, 352, 2, 37};

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 23
Matrices
Representacin de matrices
Cuando se inicialan las matrices pero no se inicializan, los
elementos reciben el valor predeterminado relacionado con
el tipo de datos.
Por ejemplo, el valor predeterminado para los tipos de datos
numricos, como int (entero), es 0. El valor predeterminado
para tipos de objeto, como String es (null).
Cuando se declara la matriz, la representacin en la tabla es
la siguiente.
int[] myArray = new int[5];

ndice: 0 1 2 3 4
Valor: 0 0 0 0 0

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 24
Matrices
Representacin de matrices actualizada

Una vez que comienza a inicializar elementos, la matriz se


actualiza.
La nueva representacin en la tabla es la siguiente.
myArray[0] = 32;
myArray[3] = 27;

ndice: 0 1 2 3 4
Valor: 32 0 0 27 0

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 25
Matrices
Tipos de objetos de matrices
Las matrices no estn restringidas al almacenamiento de
tipos de datos primitivos.
Pueden almacenar cualquier tipo de objetos, incluso los tipos
que defina.
Por ejemplo, si existe una clase de flor:
Las flores se podrn almacenar en la matriz en lugar de almacenar el
tipo de flor como String.
Teniendo en cuenta que sabemos qu flores se pueden incluir, la
segunda notacin se puede usar para inicializar myBouquet de seis
flores.
Flower[] myBouquet = {new Flower("Rose"), new Flower("Sunflower"),
new Flower("Daisy"), new Flower("Dandelion"),
new Flower("Violet"), new Flower("Lily")};

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 26
Matrices
Acceso a la longitud de la matriz
Con cada declaracin de una matriz, puede definir el tamao
o la longitud de la matriz.
La longitud se almacena como variable de una instancia para
ese objeto y se puede acceder usando la notacin
arrayName.length.
Esta tcnica es til en el siguiente ejemplo:
Establecer una matriz cuyo tamao se base en el ingreso del usuario.
Ingresar un segmento de cdigo donde el ingreso del usuario ya no se
encuentra en el mbito.
Necesitar acceder a la longitud de la variable de la instancia para esa
matriz.
En resumen, arr.length devuelve la longitud de la matriz, arr.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 27
Matrices
Recorrido de iteracin en
una matriz

Para iterar o desviar una matriz significa avanzar en cada


elemento de la matriz por nmero de ndice.
El recorrido en iteracin de una matriz es til cuando:
desea acceder a cada elemento de una matriz en orden.
desea inicializar todos los elementos de una matriz en el mismo valor.
Usar .length al recorrer en iteracin en lugar del valor entero
ingresado al declarar la matriz.
De este modo se garantizar que no reciba un ndice del error
de los lmites.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 28
Matrices
Ejemplo de recorrido de iteracin en una
matriz

Para inicializar una matriz de enteros denominada allTwos de


modo que cada elemento sea 2 utilice un bucle for, como se
indica a continuacin.
La primera lnea del cdigo corresponde a la declaracin de la
matriz.
Declara una matriz denominada allTwos con un tamao de
10.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 29
Matrices
Ejemplo de recorrido de iteracin en una
matriz

El bucle for recorre en iteracin los ndices y para cada ndice


en la matriz, el valor de ese ndice se establece en 2.

int[] allTwos = new int[10];


for(int index = 0; index < allTwos.length; index++){
allTwos[index] = 2;
} Observe de qu manera se
accede a la longitud de la
matriz para no salir de los
lmites del ndice de la matriz.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 30
Matrices
Cundo es til la iteracin

En el ejemplo de la flor, la iteracin le ayuda si desea imprimir


los tipos de flores almacenados en la matriz myBouquet.
String[] myBouquet = {"Rose", "Sunflower", "Daisy", "Dandelion",
"Violet", "Lily"};

Utilice un bucle for para recorrer esta matriz.


El contador inicializado en el bucle for se puede utilizar para
aumentar los ndices, como se indica a continuacin.
Qu se visualiza como resultado de este cdigo?
//remember that the index range is 0 to 5 for an array of size 6
for(int index = 0; index < myBouquet.length; index++){
System.out.println(myBouquet[index]);

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 31
Matrices
Bucle for-each
Java ofrece un bucle for-each, una alternativa del uso del
contador inicializado para iterar en una matriz.
Cuando se utiliza para acceder a los elementos de una matriz,
el bucle for- each funciona de la misma manera que en el
bucle for, pero se implementa de forma ms sencilla.
Si reemplazamos el cdigo del bucle for de nuestro ejemplo
anterior con el cdigo siguiente, obtenemos el mismo
resultado.
//remember that the index range is 0 to 5 for an array //of size 6
for (String myFlower : myBouquet)
{
System.out.println(myFlower);
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 32
Matrices
Bucle for-each

El bucle for-each tiene acceso (de a uno por vez) y devuelve


todos los elementos de una matriz.
Los cambios de los elementos de la matriz no se pueden
hacer usando un bucle for-each.

//remember that the index range is 0 to 5 for an array //of size 6


for (String myFlower : myBouquet)
{
System.out.println(myFlower);
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 33
Matrices
Bucle for-each

Si reemplazamos el cdigo del bucle for de nuestro ejemplo


anterior con el cdigo siguiente, obtenemos el mismo
resultado.
El ejemplo a continuacin imprimir la longitud de cada string
en la matriz myBouquet.

//remember that the index range is 0 to 5 for an array //of size 6


for (String myFlower : myBouquet)
{
System.out.println(myFlower);
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 34
Matrices
Ejemplo de bucle for-each

Ambas implementaciones del cdigo siguiente mostrarn


informacin relacionada con los elementos de la matriz.
public class Bouquet {

public static void main(String[] args){

String[] myBouquet = {"Rose","Sunflower","Daisy",


"Dandelion","Violet", "Lily"};

//use a for loop to iterate through the array


for(int index = 0; index < myBouquet.length; index++){
System.out.println(myBouquet[index]);
}

//use a for each to iterate through the array


for (String myFlower : myBouquet){
System.out.println(myFlower);
}
}
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 35
Matrices
Qu sabemos acerca de las matrices

Qu sabemos acerca de las matrices:


Las matrices son un tipo de objeto que puede almacenar cualquier tipo
primitivo o de objeto.
Por lo tanto, las matrices pueden almacenar matrices.
El concepto de almacenamiento de una matriz de matrices se
denomina matriz bidimensional.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 36
Matrices
Matrices bidimensionales
Una matriz bidimensional, denominada matriz de matrices,
es una matriz que almacena otras matrices.
La cantidad de matrices contenidas en la matriz se define en
la declaracin.
La cantidad de elementos en cada matriz interna se define
tambin en el momento de la declaracin.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 37
Matrices
Ejemplo de matriz bidimensional

Este ejemplo muestra una matriz de dos matrices con tres


elementos en cada matriz.
Una matriz bidimensional se puede visualizar como una tabla
con filas y columnas.
El ejemplo a continuacin tiene dos filas y tres columnas.
int[][] nums = { {14,51,16}, {12,73,87} };

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 38
Matrices
Declaracin de una matriz bidimensional

Componentes de matrices bidimensionales:


Tipo de datos
Nombre de la variable
Tamao de la matriz
Para declarar una matriz bidimensional, use cualquiera de los
ejemplos de sintaxis que se indican a continuacin.
data_type[][] variable_name;
variable_name = new data_type[size1][size2];
//declare it using two lines of code

data_type[][] variable_name = new data_type[size1][size2];


//declare it using one line of code

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 39
Matrices
Ejemplo 1 de declaracin de una matriz
bidimensional

Identificar los tres componentes en los siguientes ejemplos


de tipos de datos primitivos.

int[][] myArray;
myArray = new int[2][3];
char[][] sentence = new char[10][10];

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 40
Matrices
Ejemplo 1 de declaracin de una matriz
bidimensional

Al declarar una matriz bidimensional:


el primer nmero entre corchetes [2] corresponde al nmero de
matrices que tiene el contenedor (filas).
El segundo nmero entre corchetes [3] corresponde al nmero de
elementos en cada una de estas matrices (columnas).
Otra manera de declarar myArray, puede ser la siguiente:
int[][] myArray = { {0,0,0}, {0,0,0} };

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 41
Matrices
Ejemplo 2 de declaracin de una matriz
bidimensional

Su amigo le trajo tres flores de cada tipo y cada una de las


flores es de diferente color.
Con una matriz unidimensional resulta tedioso realizar el
seguimiento de estos datos.
Una matriz bidimensional le permite almacenar seis matrices,
una por cada tipo de flor y permite que cada matriz almacene
los colores de cada una de las tres flores.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 42
Matrices
Ejemplo 2 de declaracin de una matriz
bidimensional

El cdigo siguiente declara una matriz que contiene seis


matrices, cada una con una longitud de tres matrices:

String[][] myBouquet = new String[6][3];

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 43
Matrices
Inicializacin de una matriz bidimensional
Las matrices bidimensionales, al igual que las matrices
unidimensionales, se pueden inicializar usando dos mtodos
diferentes.
Mtodo 1: i es el ndice de la matriz interna (fila) y j es el
ndice del elemento en esa matriz (columna) que se inicializa.
public class TwoDTester{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int[][] nums = new int[3][2];

for(int i = 0; i < nums.length; i++){


for(int j = 0; j < nums[i].length; j++){
System.out.println("Enter a value for row " + i + ", column " + j);
nums[i][j] = in.nextInt();
}
}
}
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 44
Matrices
Inicializacin de una matriz bidimensional

Mtodo 2: Declara e inicializa todas las matrices y todos los


elementos en estas matrices en la misma lnea del cdigo.
Sin embargo, debe conocer los valores que desea que
contenga la matriz para inicializar la matriz en el mismo
momento en que se declara.

public class TwoDTester2{


public static void main(String[] args){
int[][] nums = {{2,3,7},{15, 98, 2}};
}
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 45
Matrices
Ejemplo de inicializacin de una matriz
bidimensional

Mtodo 1:
int[][] myArray = new int[3][2];
MyArray[0][0] = 7;
MyArray[0][1] = 24;
MyArray[1][0] = 352;
MyArray[1][1] = 2;
MyArray[2][0] = 37;
MyArray[2][1] = 65;

ndice de la matriz interna ndice del elemento de la matriz interna

Mtodo 2:
int[][] myArray = new int[][] {{7, 24}, {352, 2}, {37, 65}};

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 46
Matrices
Uso de la segunda notacin para inicializar
la matriz

Dado que ya conocemos el contenido de las matrices para


nuestro ramo, use la segunda notacin para inicializar la
matriz.
Recuerde que el orden es rosa, girasol, margarita,
diente de len, violeta y, luego, lirio.
String[][] myBouquet = {{"Red", "Peach", "Yellow"},
{"Yellow", "White", "Blue"},
{"Green", "Blue", "Purple"},
{"White", "White", "White"},
{"Purple", "Pink", "Violet"},
{"Pink", "Orange", "White"}};

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 47
Matrices
Uso de la segunda notacin para inicializar
la matriz

Estas flores estarn representadas por los ndices 0, 1, 2, 3, 4


y 5.

String[][] myBouquet = {{"Red", "Peach", "Yellow"},


{"Yellow", "White", "Blue"},
{"Green", "Blue", "Purple"},
{"White", "White", "White"},
{"Purple", "Pink", "Violet"},
{"Pink", "Orange", "White"}};

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 48
Matrices
Representacin de matriz bidimensional

La matriz bidimensional se representa de la siguiente manera.


ndice 0 1 2
0 (rosa) Rojo Durazno Amarillo

1 (girasol) Amarillo Blanco Azul

2 (margarita) Verde Azul Prpura

3 (diente de len) Blanco Blanco Blanco

4 (violeta) Prpura Rosa Violeta

5 (lirio) Rosa Naranja Blanco

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 49
Matrices
Visualizacin de una matriz bidimensional

Otra manera de visualizar una matriz bidimensional es al


alinear los valores en el momento de la inicializacin.
Esta tcnica ayuda a realizar el seguimiento de la manera en
que se organizan los datos.
String[][] myBouquet = {{"Red", "Peach", "Yellow"}, {"Yellow", "White",
"Blue"}, {"Green", "Blue", "Purple"}, {"White", "White", "White"},
{"Purple", "Pink", "Violet"}, {"Pink", "Orange", "White"}};

String[][] myBouquet = {{"Red", "Peach", "Yellow"},


{"Yellow", "White", "Blue"},
{"Green", "Blue", "Purple"},
{"White", "White", "White"},
{"Purple", "Pink", "Violet"},
{"Pink", "Orange", "White"}};

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 50
Matrices
Visualizacin de una matriz bidimensional

En los ejemplos de cdigo siguientes , observe cmo la


segunda forma es ms fcil de visualizar.

String[][] myBouquet = {{"Red", "Peach", "Yellow"}, {"Yellow", "White",


"Blue"}, {"Green", "Blue", "Purple"}, {"White", "White", "White"},
{"Purple", "Pink", "Violet"}, {"Pink", "Orange", "White"}};

String[][] myBouquet = {{"Red", "Peach", "Yellow"},


{"Yellow", "White", "Blue"},
{"Green", "Blue", "Purple"},
{"White", "White", "White"},
{"Purple", "Pink", "Violet"},
{"Pink", "Orange", "White"}};

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 51
Matrices
Acceso a los datos en una matriz
bidimensional

Para acceder a los datos en una matriz bidimensional, debe


conocer:
El ndice de la matriz para el acceso.
El ndice del contenido en esa matriz para el acceso.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 52
Matrices
Ejemplo de acceso a los datos en una
matriz bidimensional

Por ejemplo, para acceder al color de la rosa en myBouquet,


use el ndice de la matriz rosa (0) y el ndice del primer
color (0).
//Previously initialized array
String[][] myBouquet = String[][] {{"Red", "Peach", "Yellow"},
{"Yellow", "White", "Blue"},
{"Green", "Blue", "Purple"},
{"White", "White", "White"},
{"Purple", "Pink", "Violet"},
{"Pink", "Orange", "White"}};

String rose1 = myBouquet[0][0]; //accesses first element of first


array

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 53
Matrices
Ejemplo de acceso a los datos en una
matriz bidimensional

Revisin de la inicializacin de la matriz anterior.


//Previously initialized array
String[][] myBouquet = String[][] {{"Red", "Peach", "Yellow"},
{"Yellow", "White", "Blue"},
{"Green", "Blue", "Purple"},
{"White", "White", "White"},
{"Purple", "Pink", "Violet"},
{"Pink", "Orange", "White"}};

Qu se visualizar en la pantalla de la consola despus de


ejecutar el siguiente cdigo?
System.out.println(myBouquet[0][1] + " Rose.";
System.out.println(myBouquet[5][2] + " Lilly.";

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 54
Matrices
Solucin del ejemplo de acceso a los datos
en una matriz bidimensional

Qu se visualizar en la pantalla de la consola despus de


ejecutar el siguiente cdigo?
System.out.println(myBouquet[0][1] + " Rose.";
System.out.println(myBouquet[5][2] + " Lilly.";

Solucin:
Rosa durazno
Lirio blanco

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 55
Matrices
Acceso a la longitud de matrices
bidimensionales

La longitud es una variable de la instancia definida por el


tamao de cada matriz declarada.
Las matrices bidimensionales tienen dos longitudes
diferentes:
Longitud de la matriz externa.
Longitud de las matrices internas.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 56
Matrices
Longitud de las matrices externas e
internas

Se accede a la longitud de la matriz externa, que es la


longitud que describe la cantidad de matrices contenidas
(filas), como a una matriz tpica.
int numArrays = arrayName.length;

Se accede a la longitud de las matrices internas, que es la


longitud que describe la cantidad de elementos que contiene
cada matriz (columnas), usando la siguiente notacin.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 57
Matrices
Longitud de las matrices externas e
internas

Los corchetes [ ] le indican al programa que estn accediendo


a la longitud de las matrices internas y la fila indica cul es la
matriz.
int numElementsInEach = arrayName[row].length;

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 58
Matrices
Ejemplo de longitud de las matrices
externas e internas

Revisin de este cdigo.


String[] one = new String[7];
int[][] two = new int[5][3];
double[][] three = new double[3][2];
People[] four = new People[5];

Cul de los siguientes enunciados no es verdadero? Puede


identificar cul incluye una sintaxis inadecuada para acceder
a la longitud?
one.length == 7;
two.length == 3;
three.length == 3;
two[0].length == 3;
three[0].length == 2;
four[0].length == 5;

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 59
Matrices
Solucin del ejemplo de longitud de las
matrices externas e internas

Solucin:
two.length == 3;
es FALSO
four[0].length == 5;
no es una sintaxis vlida

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 60
Matrices
Tipos de objetos de matrices
bidimensionales

Al igual que las matrices unidimensionales, las matrices


bidimensionales pueden almacenar cualquier tipo de objeto.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 61
Matrices
Tipos de objetos de matrices
bidimensionales

De qu manera podemos organizar a los estudiantes en un


aula en tres grupos, con cinco estudiantes por grupo como
una matriz?
Respuesta: Declare una matriz bidimensional para contener
las tres matrices, una para cada grupo.
Cada matriz almacena cinco estudiantes.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 62
Matrices
Tipos de objetos de matrices
bidimensionales

Se ha definido una clase denominada estudiante y tiene un


constructor que toma el primer nombre del estudiante.
El siguiente cdigo declara la matriz que almacena el grupo
de estudiantes.
Student[][] groups = new Student[3][5];

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 63
Matrices
Ubicacin de los estudiantes en la matriz
bidimensional

Dada una matriz de String que contiene los nombres de 15


estudiantes en los grupos, de qu manera podra realizar las
siguientes tareas?
Iterar en la matriz existente.
Crear un nuevo estudiante para cada nombre.
Colocar a cada estudiante en uno de los tres grupos.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 64
Matrices
Ubicacin de los estudiantes en la matriz
bidimensional

Usted ya sabe de qu manera:


Iterar en una matriz utilizando un bucle for.
Crear un nuevo estudiante para cada nombre en el bucle.
Ubicar a los estudiantes en la matriz bidimensional usando un bucle
anidado for.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 65
Matrices
Bucles anidados for

Un bucle anidado for:


Es un bucle for dentro de otro bucle for.
Se puede utilizar para iterar en matrices bidimensionales usando el
bucle for externo como el ndice de las matrices (filas) y el contador
interno del bucle for, como el ndice de los elementos de cada matriz
(columnas).
Considere la siguiente declaracin de una matriz
bidimensional:
Student[][] groups = new Student[3][5];

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 66
Matrices
Bucles anidados for

Para iterar en la matriz e inicializar a cada estudiante como


Temp, use los bucles anidados for, como se indica a
continuacin.

for(int i = 0; i < groups.length; i++){ //i keeps track of


the rows
for(int j = 0; j < groups[i].length; j++){ //j keeps track of
the columns
groups[i][j] = new Student("Temp");
}
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 67
Matrices
Completar las tareas usando los bucles
anidados for

De qu manera podramos completar las tres tareas?


Iterar en la matriz existente.
Crear un nuevo estudiante para cada nombre.
Colocar a cada estudiante en uno de los tres grupos.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 68
Matrices
Completar las tareas usando los bucles
anidados for

String[] studentNames;
//Assume studentNames is initialized with 15 names

Student[][] groups = new Student[3][5];//Declare your array


int x = 0;
for(int i = 0; i < groups.length; i++){
for(int j = 0; j < groups[i].length; j++){
String name = studentNames[x];
groups[i][j] = new Student(name);
x++;
}
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 69
Matrices
Argumentos de lnea de comandos

Una matriz siempre ha sido parte del mtodo principal.


El args de la matriz de String siempre se considera un
parmetro para el mtodo principal.

public static void main(String[] args)

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 70
Matrices
Argumentos de lnea de comandos:
Agregado de argumentos adicionales

Si ejecuta un programa Java desde un entorno de una lnea


de comandos, puede escribir argumentos adicionales, de la
siguiente manera:
java Test apples peaches pumpkin pie

El trmino Java indica el entorno de la lnea de comandos


para utilizar el JVM para ejecutar la prueba del programa.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 71
Matrices
Argumentos de lnea de comandos:
Agregado de argumentos adicionales

Los args de la matriz se completan automticamente con los


Strings: manzanas, duraznos, calabazas y pastel.
Al usar Eclipse, evitamos el entorno de la lnea de comandos.
Sin embargo, podemos usar argumentos de la lnea de
comandos en Eclipse.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 72
Matrices
Uso de los argumentos de la lnea de
comandos en Eclipse

Acceda a la pestaa de argumentos para su programa, dirjase


al men Ejecutar y elija Abrir dilogo ejecutar.
Haga clic en la pestaa Argumentos y escriba los Strings:
manzanas, duraznos, calabazas y pastel.

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 73
Matrices
Uso de los argumentos de la lnea de
comandos en Eclipse

Haga clic en Ejecutar, para este programa.


Todos los Strings que se escribieron en la pestaa
Argumentos se imprimirn en la consola.
public class TestArgs {
public static void main(String[] args){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
}

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 74
Matrices
Terminologa

Los trminos clave usados en esta leccin son los siguientes:


Algoritmo
Matriz
Matriz de matrices
Argumento de la lnea de comandos
ndice
Iterar

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 75
Matrices
Terminologa

Los trminos clave usados en esta leccin son los siguientes:


Bucle anidado for
Matriz unidimensional
Desviar
Matriz bidimensional

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 76
Matrices
Resumen

En esta leccin, habr aprendido a:


Escribir una matriz unidimensional en un programa Java
usando tipos de datos primitivos
Escribir una matriz unidimensional en un programa Java
usando tipos de referencia (objetos)
Escribir una matriz bidimensional en un programa Java
usando tipos de datos primitivos
Escribir una matriz bidimensional en un programa Java
usando tipos de referencia (objetos)
Declarar, inicializar y desviar una matriz

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 77
Matrices
Resumen

En esta leccin, habr aprendido a:


Describir la inicializacin de la matriz
Distinguir entre el mtodo length() de String y el valor de
longitud de la matriz
Reescribir un programa Java para almacenar enteros en una
matriz, realizar un clculo matemtico y mostrar el resultado
Usar sintaxis alternativas de declaracin de matrices

JF 6-1 Copyright 2015, Oracle y/o sus afiliadas. Todos los derechos reservados. 78
Matrices