0% encontró este documento útil (0 votos)
20 vistas20 páginas

Documentación Arrrays

Un array (lista o tabla) es una secuencia de datos del mismo tipo que se almacenan en posiciones contiguas de memoria. Cada elemento de un array se identifica mediante un índice o subíndice que indica su posición. En Java, los arrays siempre comienzan en la posición 0. Para declarar un array se especifica su tipo, nombre e indica entre corchetes que es un array. Es necesario asignarle un tamaño usando el operador new. Los elementos individuales se accesan mediante su índice entre corchetes.

Cargado por

Amado Melguizo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas20 páginas

Documentación Arrrays

Un array (lista o tabla) es una secuencia de datos del mismo tipo que se almacenan en posiciones contiguas de memoria. Cada elemento de un array se identifica mediante un índice o subíndice que indica su posición. En Java, los arrays siempre comienzan en la posición 0. Para declarar un array se especifica su tipo, nombre e indica entre corchetes que es un array. Es necesario asignarle un tamaño usando el operador new. Los elementos individuales se accesan mediante su índice entre corchetes.

Cargado por

Amado Melguizo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 20

11.1.

ARRAYS
Un array (lista o tabla) es una secuencia de datos del mismo tipo. Los daios se ~aman elementos dci
array y se numeran consecutivamente O, 1,2,3... El tipo de elementos almacenados en el arra)' puede
ser cualquier tipo de dato simple de Java, o de tipo previamente declarado. ~orma1mente el arra)' se
utiliza para almacenar tipos tales como char, int o float.
Un array puede contener, por ejemplo, la edad de los alumnos de una clase, las temperaturas de
cada día de un mes en una ciudad determinada, o el número de personas que residen en cada una de las
diecisiete comunidades autónomas españolas. Cada item del array se denomina elemento.
Los elementos de.un array se numeran, como ya se ha comentado, consecutivamente O, 1,2,3...
Estos números se denominan valores índice o subíndice del array. El término «subíndice» se utiliza, ya
que se especifica igual que en matemáticas, como una secuencia tal como ao, al, a2... Estos números
localizan la posición del elemento dentro del array, proporcionando acceso directo al array.
Si el nombre del array es a, entonces a [O] es el nombre del elemento que está en la posición c.
a [1] es el nombre del elemento que está en la posición 1, etc. En general, el elemento i-ésimo está
en la posición i -1. De modo que si el array tiene n elementos, sus nombres son a [O], a [1], ...
a [n-1] . Gráficamente se representa así el array a con seis elementos.

a 25.1 34.2 5.25 7.45 6.09


I I I I I L54

O 1 2 3 4 ", 5

Figura 11.1. Array de seis elementos.


4.

El array a tiene seis elementos: a [O] contiene 25.1, a [1] contiene 34.2, a [2] contiene 5.25, a [3~
contiene 7.45, a [4] contiene 6.09 y a [5] contiene 7.54. El diagrama de la Figura 11.1 representa real-
mente una región de la memoria de la computadora, ya que un array se almacena siempre con sus ele-
mentos en una secuencia de posiciones de memoria contigua. .

En Java, los índices de un array siempre tienen como límite inferior O,como índice superior el tama-
ño del array menos l.

11.1.1. Declaración de un array

Al igual que con cualquier tipo de variable, se deb~ declarar un array antes de utilizarlo. Un array se
declara de modo similar a otros tipos de datos, excepto que se debe indicar al compilador que es un
array y esto se hace con los corchetes.
int [Iv;
float w[] ;

Los corchetes se pueden colocar de dos formas:

.. Colocando los corchetes a continuación del tipo de datos.


Colocando los corchetes a continuación del nombre del array

Así, la sintaxis de declaración de variables array en Java:


tipo [] identificador;
tipo identificador [];

El primer formato indica que todos los identificadores son arrays del tipo. El segundo formato es '11
array sólo el identificador al que le siguen los [].
, n '

EJEMPLO 11.1. Se escriben distintas declaraciones de arrays.


1. char cad[] P; I

cad es un array de tipo char; p es una variable de tipo char.


2. int [] v, w;
tanto v como w son declarados arrays unidimensionales de tipo int.
3. double [] m, t [], x;
my x son array de tipo double; t es un array de array con elementos de tipo double.

Para indicar el número de elementos que tiene un array se usa el operador.new. Por ejemplo, para
crear una array que guarde las notas de la asignatura de música en un aula de 26 alumnos:
float []notas;
notas = new float[26];
j"
Se puede escribir en una misma sentencia:
float [] notas = new float[26];

La sintaxis para declarar y definir un array de un número de elementos determinado es:


tipo nombreArray[] = new tipo[numeroDeElementos];

o bien,
tipo nombreArray[];
nombreArray = new tipo[numeroDeElementos];

Por ejemplo, para crear un array (lista) de diez variables de tipo entero se escribe:
int al] = new int [10];

Esta declaración hace que el compilador reserve espacio suficiente para contener diez datos de tipo
entero. En Java, los enteros ocupan, normalmente, cuatro bytes, de modo que un array de diez enteros
ocupa 40 bytes de memoria. A esta memoria hay que añadir cuatro bytes más que Java utiliza para guar-
dar el número de elementos del array. La Figura 11.2 muestra el esquema de un array de diez elemen-
tos; cada elemento puede tener su propio valor.
Se puede acceder a cada elemento del array utilizando un índice en el nombre del array. Por ejem-
plo,

System.out.p~int(a[4]) ;

visualiza el valor del elemento 5 del array. Los arrays siempre comienzan en el elemento O.Así pues, el
array a contiene los siguientes elementos individuales:
a [O] a [1] a [2] a [3] a [4] a [5] a [6] a [7]
a [8] a [9]

L
Array de datos entero: a

1'0 I [O] I [1] I [2) I [3] 1 [4] I [5] I [6] I [7] I [8] I [9] I

Un array de enteros se almacena en byte s consecutivos de memoria. Cada ele-


mento utiliza cuatrobytes. Se accede a cada elemento de array medianteun índi-
ce que comienza en cero. Así, el acceso al elemento quinto es a [4 J .

Figura 11.2. Almacenamiento de un array en memoria. ~ :::.

.
si, por ejemplo, se.quiere crear un array de números reales. El tamaño es una constante representada
por una variable protegida (final).
final int N = 20¡
.,
.
.~

float vector[J ¡
vector = new float[NJ¡ 'i'
~

Para acceder al tercer elemento y leer un valor de entrada:

vector[2J = (Float.valueOf(entrada.readLine())) .floatValue() ¡

11.1.2. Subíndices de un array

El índice de un array se denomina, con frecuencia, sub índice del array. El término procede de las mate-
máticas, en las que un subíndice se utiliza para representar un elemento determinado.

numeroso equivale a numeros [OJ


numeros3 equivale a numeros [3 J

El método de numeración del elemento i-ésimo con el índice o subíndice i -1 se denomina indexa-
ción basada en cero. Su uso tiene el efecto de que el índice de un elemento del array es siempre el mis-
mo que el número de «pasos» desde el elemento inicial a [OJ a ese elemento. Por ejemplo, a [3 J está a
tres pasos o posiciones del elemento a [O J .

Ejemplos
int [Jedad = new int[SJ ¡ Array edad contiene cinco elementos: el primero, edad [OJ , y el
último, edad [4] .
int [J pesos, longitudes¡ Declara dos arrays de enteros (no asigna tamaño).
""~T- , T ,

float salarios[]; Declara un array de 25 elementos float .


salarios = new float[2S];
double temperaturas[]; Declara un array de 50 elementos double.
temperaturas =new double[SO];
char [] letras = new char [2S] ; Declara un array de caracteres.
Racional [] ra = new Racional [S] ;Declara un array de cinco objetos racional.
final int MX = 20;
char buffer[]=new char[MX+l]; Declara un array de caracteres de tamaño MX+l, el primer
elemento es buffer[O] y el último buffer[MX].

En los programas se pueden referenciar elementos del array utilizando fórmulas para los subíndices.
Mientras que el subíndice pueda ser evaluado a un entero, se puede utilizar una constante, una variable
o una expresión para el subíndice. Así, algunas referencias individuales a elementos son:
". ,...
edad [4]
ventas [total+S] "
bonos [mes]
salario[mes[i]*S]
"

11.1.3. Almacenamiento de los arrays en memoria


~

Los elementos de los arrays se almacenan en bloques contiguos. Así, por ejemplo, los arrays

int edades[];
char codigos[];
edades = new int[S];
codigos = new char[S]

se representan gráficamente en memoria en la Figura 11.3.

edades [O] codigos [O]

[1] [1]

[2] [2]

[3] [3]

[4] [4]

Figura 11.3. Almacenamiento de arrays en memoria.


- -,,- --- --- _. o.. 0-

Los arrays de caracteres funcionan de igual fonna que los arrays numéricos,partiendo de la base de
que cada carácter ocupa nonnalmente dos bytes. Así, por ejemplo, un array llamado nombre se puede
representar en la Figura 11.4.
nombre

e [O]

a [1]
z [2]

o [3]
r [4]
I [5]
a [6]

Figura 11.4. Almacenamiento de un array de caracteres en memoria.

11.1.4. El tamaño de los arrays. Atributo length

Java considera cada array un objeto, debido a ello "sepuede conocer el número de elementos de un array
accediendo al campo length. Este campo resulta muy útil cuando se pasa un array a un método.
double [J v = new double[15];
System.out.print(v.length) ;//escribe 15, número de elementos de v.

Java conoce el número de elementos de un array cuando se asigna el número de elementos con el
operador new o bien con una expresiónde inicialización. El campo length está protegido, no puede
1

ser modificado, ya que está definido como final.


Java no tiene necesidad de usar el operador sizeofpara determinar la longitud de un array, tiene
el campo length asociado a cada array que se crea. Al no serIe necesario, Java no tiene definido el
operador sizeof .

EJEMPLO11.2. El método suma () tiene como argumento un array de tipo double. Se quiere que
devuelva la suma de sus elementos.
Para escribir este método, se define una variable que acumula los elementos del array. En un bucle con
tantas iteraciones como elementos (longitud) se determina la suma.

double suma (double [J w)


{
double s = 0.0;
for (int i=O; i < w.length); i++)
s += w [iJ i
return s;
11.1.5. Verificación del rango del índice de un array
.j;;

Java, al contrario que el lenguaje C, verifica el valor del índice de la variable que representa al array. Así,
por ejemplo, en Java si se define un array a de seis elementos, índices O a 5, entonces el acceso a [6]
es detectado por el compilador y genera un mensaje de error. Durante la ejecucióp. del programa tam-
bién puede ocurrir el acceso a un elemento fuera de los índices, esto producirá que el programa se «rom~
pa» en tiempo de ejecución, generando una excepción.
le

EJEMPLO 11.3. Protección frente a errores en el intervalo (rango) de valores de una variable de
índice que representa un array.

int datos (double a[])throws IOException


{

int n;
System.out.println("Entrada de datos, cuantos elementos: ? ");
System.out.flush(); ,
n = Integer.parselnt(entrada.readLine());
if (n > a.length)
return O;
for (int i = O; i < n; i++)
a[i]= Double.valueOf(entrada.readLine()) .doubleValue();
return 1;

11.2. INICIALlZACIÓN DE UN ARRAY

Se deben asignar valores a los elementos del array antes de utilizados, tal como se asignan valores a
variables. Para asignar valores a cada elemento del array de enteros precios, se puede escribir:
precios [O] = 10;
precios [1] = 20;
precios [3] =30;
precios [4] = 40;

La primera sentencia fija precios [O] al valor 10, precios [1] al valor 20, etc. Sin embargo, este
método no es práctico cuando el array contiene muchos elementos. El método utilizado, normalmente,
es inicializar el array completo en una sola sentencia.
Cuando se inicializa un array, el tamaño del array se puede determinar automáticamente por las
constantes de inicialización. Estas constantes se separan por comas y se encierran entre llaves, como
en los siguientes ejemplos:
int numeros[] = {1O, 20, 30, 40, 50, 60}¡ /* Define un array de 6
elementos y se inicializan a las constantes */
int n[] = {3, 4, s} // Define un array de 3 elementos
char c[] = {'L' ,'u' ,'i' ,'s'}¡ // Define un array de 4 elementos

El array numeros tiene seis elementos, n tiene tres elementos y el array c tiene cuatro elementos.

El método de inicializar arrays mediante valores constantes después de su definición es adecuadc


cuando el número de elementos del array es pequeño. Por ejemplo, para inicializar un array (lista) de
10 enteros a los valores lOa 1, Y a continuación visualizar dichos valores en orden inverso, se puede
escribir:

int cuenta[L = {ID, 9, 8, 7, 6, 5, 4, 3, 2, 1};


for (i = 9¡ i >= O¡ i--)
System.out.println(Ucuenta descendente u + i + u=" + cuenta[i]) ¡

Se pueden asignar valores numéricos representadbs mediante variables protegidas con la cláusula
final, de modo que las sentencias siguientes son válidas:

final int ENE = 31, FEB = 28, MAR = 31, ABR = 30, MAY = 31,
JUN = 30, JUL = 31, AGO = 31, SEP = 30, OCT = 31,
NOV = 30, DIC = 31¡

int meses[] = {ENE, FEB, MAR, ABR, MAY, JUN,


JUL, AGO, SEP, OCT, NOV, DIC}¡

Pueden asignarse valores a un array utilizando un bucle for o while/do-while,y éste suele ser
el sistema más empleado normalmente. Por ejemplo, para inicializar todos los valores del array nume-
ros al valor -1, se puede utilizar la siguiente sentencia:

for (i = O¡ i < numeros.length¡ i++)


numeros[i] = -1¡

debido a que el valor del subíndice i varía de O al número de elementos -1, cada elemento del array
numeros se inicializa y se establece a-1.

EJEMPLO 11.4. El siguiente programa lee NUM enteros; a continuación visualiza el producto de
los núme.ros.

import java.io.*¡
class Inicial
public static void main(String [] a)throws IOException
{

final int NUM = 10¡


BufferedReader entrada = new BufferedReader(
new InputStrearnReader(System.in));
int nums[]= new int[NUM] ¡
int total = 1¡
System.out.println("Por favor, introduzca" + NUM + " datos") ¡
System.out.flush() ;
~
for (int i = O¡ i < NUM¡ i++)
{

nums[i] = Integer.parseInt(entrada.readLine());
}

System.out.print("\nLista de números: ")¡


for (i = O¡ i < NUM¡ i++)
{

System.out.print(" " + nums[i]) ¡


total *= nums[i] ¡
}

System.out.println("\nEl producto de los números es " + total) ¡

~
Los arrays en Java se inicializana O por defecto. Por ello,la ejecución del siguiente programa visua-
liza O para los 10 valores del array:

int lista[]=new int[10] ¡


for (int j = O¡ j <= 9; j++)
System.out.print("\n lista" + j + "=" + lista[j]) ¡

11.3.ARRAYS DE CARACTERES Y CADENAS DE TEXTO

Una cadena de texto es un conjunto de caracteres, tales como "ABCDEFG".Java soporta cadenas de tex-
to utilizando la clase String y StringBuffer implementada en el paquete Java.lang.

String cadena = "ABCDEFG";

Es importante comprender la diferencia entre un array de caracteres y una cadena de caracteres.


Los stringsson objetos en los que se almacenan las cadenas, tienen diversos constructores y métodos.
Los arrays de tipo char son una secuencia de caracteres, con las mismas características que los aiTays de
otros tipos.

String mas = "Programador Java"¡ // crea objeto cadena.


ehar- datos [] ={ 'F',' i', 'e', 'h' ,'e', 'r', 'o'} ¡ // define array de 7
l/elementos.
String dat = new String(datos); /* crea objeto cadena con el
constructor que tiene como argumento un array de caracteres */
System.out.println(dat); // muestra la cadena dat: ~Fichero"
System.out.println(datos); // es un error, datos no es una cadena

~""'~,.

Una vez que un objeto String es creado e inicializadocon una cadena, no puede modificarse.Los
métodos definidos en Stringpara concatenar, cambiar caracteres... no rBodifican la cadena, sino que
devuelven otro objeto String.Se puede decir que cadenas de tipo Stringson de sólo lectura.
Las cadenas definidas como objetos StringBuffer pueden cambiar la longitud de la cadena y el
contenido.

StringBuffer cc = new StringBuffer(~Cadena variable");


cc.replace('v' ,'VI); // cambia la letra v por V en el ~bjeto cc.

Para concatenar constantes cadena se utiliza el operador + , como ya se ha hecho en la salida


mediante print() o println(). El operador está sobrecargado para poder convertir otros tipos de
datos a tipo cadena y realizar la concatenación. Así:

int h = 24; ~
System.out.print(~valor de h = ~ + h); /* concatena y forma la
cadena ~valor de h = 24" */
System.out.print(~valor de h = ~ +h+h); /* concatena y forma la
cadena ~valor de h = 2424" */
System.out.print(~valor de h = ~ +(h+h)); /* concatena y forma la
cadena ~valor de h =48" */

La clase Stringtiene definido el método concat () para unir o concatenar dos cadenas. El méto-
do devuelve otro objeto String con las dos cadenas unidas.

String cl = ~Mi pueblo es ~;


String c2 = ~Lupiana";
System.out.println(cl.concat(c2)); /* se muestra en pantalla:
~Mi pueblo es Lupiana" */

La longitud de una cadena se obtiene llamando al método length() de la clase String.Una con-
fusión habitual es obtener la longitud de un array con una llamada a length() ; o a la inversa, obtener
la longitud de una cadena con el campo length.

String buf = ~ Cadena de oro"~


char acad[] = new char[6] ;
for (int j= O; j<6; j++)
acad[j] = (char) 'a'+j;
System.out.println(~Longitud de buf = ~ + buf.length());
System.out.println(~Longitud de acad = ~ + acad.length);

EJEMPLO 11.5. El programa crea un array r;lecadenas con las líneas de texto leídas desde el teclado.
El programa define un array de objetos cadena: String cads[];J:l máximo de líneas que van a ser leídas
es 23. Una vez terminada la entrada se muestran por pantalla.
import java.io.*;
class Cadenas
{

public static void main(String [] a)throws IOException


{

final int NUM = 23;


BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in)rl"
String[] cads= new String[NUM];
System.out.println("\nIntroduzca " + NUM +" líneas"); ...~.

for (int i = O; i < NUM; ++i)


cads[i] = entrada.readLine(); ~

System.out.println("\n\tLíneas tecleadas");
for (int i = O; i < NUM; ++i)
~
System.out.println(i + ":" + cads[i]);

EJEMPLO 11.6. Visualizar el array entero aleat después de asignar datos en el mismo con el méto-
do random ()de laclase Math. El rango de números aleatorios que sea de 1 a 99.

El método random () genera números aleatorio s entre 0.0 y 1.0 (no inclusive) de tipo double. Para
generar números enteros entre 1 y 99 se multiplica por el límite superior y se suma 1:
1 + (int) Math,random()*99

import java.io.*;
class Aleatorio
'J
{

public static void main(String [] a)


{

final int TOPE = 99;


final int N = 19;
int [] v = new int[N];
for (int i = O; i < N; i++)
v[i] = 1 + (int) Math.random()*TOPE;
System.out.println("\n Valores generados aleatoriamente");
for (int i = O; i < N; i++)
System.out.print(v[i] + " ");

11.4. COPIA DE ARRAYS

Los elementos de uwarray se pueden asignar a otro array con un bucle que recorra cada elemento, el
array destino tiene que estar definido con al menos los mismos elementos. Así, por ejemplo:

final int N = 12;


int vl[] = new int[N], v2[] = new int[N];
for (int i = O; i < N; i++)
vl[i] = (int)Math.random() *199 +1 ;
// Los elementos de vI son copiados a v2
for (int i = O; i < N; i++)
v2 [i] = vI [i] ;
En vez de una copia de todos los elementos puede interesar copiar una parte de ellos, esto se hace
variando el índice inicial o el índice final del bucle. Así, si se quiere copiar la primera mitad de los ele-
mentos:

for (int i = o; i < v1.1engthj2; i++)


v2 [i] = v1 [i] ;
~. -

Esta copia se puede hacer con un método de la clase System, arrayCopy () .Antes conviene
recordar que los nombres de arrays son referencias a un bloque de memoria ,distribuida según el núme-
ro de elementos, por lo que si se hace una asignación entre dos variables array éstas se refieren al mis-
mo array. Por ejemplo:

double [] r, W;
r = new double[ll];
w = new double[15];
for (int j = o; j < r.length; j++)
r[j] = (double) 2*j-1;
j/ asignación de r a w
w = r;

Esta asignación hace que se pueda acceder a los elementos desde r o desde w, pero no se ha crea-
do un nuevo almacenamiento para los elementos; los 15 elementos que inicialmente se referencian
desde w se han perdido.
Para copiar los 11 elementos que tiene al vector r en wcon el método arrayCopy()hay que espe-
cificar la posición inicial del vector desde el que se copia, la posición del vector destino donde se inicia
la copia y el número de elementos:

System.arrayCopy(r,O,w,O,ll) ;

EJEMPLO 11.7
Se quiere definir dos arrays de tipo double, v y W,con 15 y 20 elementos, respectivamente. En el array
v se van a guardar los valoresde la función e 2x-1para valoresde x mayor o igual de 1.0;el array Wse ini-
cializa cada elemento al ordinal del elemento. A continuación se copian los 10 últimos elementos de v
a partir del elemento 11 de w. Por último se escriben los elementos de ambos arrays.
El programa que se escribe a continuación sigue los pasos indicados en el enunciado. Se usa la fun-
ción exp () de la clase Math para el cálculo de la función e 2x-l, asícomoelmétodoarrayCopy() para
realizar la copia de elementos de array pedida.

import java.io.*;
class CopiArray
{

public static void main(String [] a)


{
final int N = 15;
final int M = 20;
double [] v = new double[N], w = new double [M];
double x = 1.0;
for (int i = o; i < N; x+=0.2,i++)
v[i] = Math.exp(2*x-1);
for (int i = O; i < M; i++)
w[i] = (double)i;
// Se imprimen los elementos del vector v
System.out.println(u\n Valores del vector v");
for (int i = O; i < N; i++)
System.out.print(v[i] + u U);
System.out.flush();
// Es realizada la copia de v a w
System.arrayCopy(v,N-10+l,w,10,11);
// Se impimen los elementos del vector w
System.out.println(u\n Valores del vector w");
for (int i = O; i < M; i++)
System.out.print(w[i] + u ");
System.out.flush() ;

La forma sintáctica de llamada al método arraycopy:

En este ejemplo se copian elementos de un array w en un array p, se comete un error por no tener
suficiente memoria reservada:

final int N =20;


double w[] = new double[N];
// asignación de valores a los elementos de w
// se define un array para copiar los 10 últimos elementos de w
double p[] = new double [10];
int j = 1;
System.arrayCopy(w,N-1O,p,j,lO );// la copia en p[L se sale de rango

11.5. ARRAYS MULTIDIMENSIONALES

Los arrays vistos anteriormente se conocen como arrays unidimensionales (una sola dimensión) y se
caracterizan por tener un solo subíndice. Estos arrays se conocen también por el término listas. Los
arrays multidimensionalesson aquellosque tienen más de una dimensióny, en consecuencia,más de un
índice. Los arrays más usuales son los de dos dimensiones, conocidos también por el nombre de tablas
o matrices. Sin embargo, es posible creararrays de tantas dimensiones como requieran sus aplicaciones,
esto es, tres, cuatro o más dimensiones.
Un array de dos dimensiones equivale a una tabla con múltiples filas y múltiples columnas (Fig. 11.5).

o 2 3 n

"

m
..-....-.-....-.........-...-..

. Figura 11.5. Estructura de un array de dos dimensiones.

Obsérvese que en el array bidimensional de la Figura 11.5, si las filas se etiquetan de O a m y las
columnas de O a n, el número de elementos que tendrá el array será el resultado del producto (m+ 1) *
(n+ 1). El sistema de localizar un elemento será por las coordenadas representadas por su número de fila
y su número de columna (a, bY.La sintaxis para"=
la declaración de un array de dos dimensiones es:
<tipo de datoElemento> <nombre array> [] [];
o bien
<tipo de datoElemento> [] []<nombre array>;

Algunos ejemplos de declaración de tablas:


char pantalla[] [];
int puestos [] []i
double [] []matriz;

Estas declaraciones no reservan memoria para los elementos de la matriz o tabla,rrealmente son
referencias. Para reservar memoria y especificar el número de filas y de colum~as se utiliza el operador
new. Así, a partir de las declaraciones anteri0res:

pantalla = new char [80] [24] ; // matriz con 80 filas y 24 columnas


puestos= new int [10] [5]i // matriz de 10 filas por 5 columnas
final int N = 4;
matriz = new double[N] [N]; /1 matriz cuadrada de N*N elementos

El operador new se puede aplicar a la vez que se hace la -declaración.La sintaxis para definir una
matriz:

<tipo de datoElemento> <nombre array>[][]=


new<tipo de datoElemento> [<NúmeroDeFilas<] [<NúmeroDeColumnas>];
Arrays (listas y tablas) :itil

Un alTay de dos dimensiones en realidad es un array de arrays. Es decir, es un aITay unidimensio-


nal, y cada elemento no es un valor entero, o de coma flotante o carácter, sino que cada elemento es
otro alTay. 'i

Los elementos de los aITays se almacenan en memoria de modo que el subíndice más próximo al
nombre del aITay es la fila y el otro subíndice, la columna. En la Tabla 11.1 se representan todos los
elementos y sus posiciones relativas en memoria del alTay,int tabla[] [] =new int [4] [2] , supO-
niendo que cada entero ocupa cuatro bytes.

Tabla 11.1. Un array bidimensional

Elemento Posición relativa de memoria


tabla [O] [O] O
tabla [O] [1] 4
tabla [1] [O] 8
tabla [1] [1] 12
tabla [2] [O] 16
tabla [2] [1] 20
tabla [3] [O] 24
tabla [3] [1] 28

11.5.1. Inicialización de arrays multidimensionales


Los aITaysmultidimensionales se pueden inicializar, al igual que los de una dimensión, cuando se decla-
ran. La inicialización se hace utilizando llaves, encelTando entre llaves la lista de constantes separadas
por comas de que consta cada fila, como en los ejemplos siguientes:

1. int tabla1[] [] = { {51, 52, 53},{54, 55, 56} }¡


Se ha definido una matriz de dos filas por tres columnas cada fila.
O bien en estos otros formato s más amigables:

int tabla1 [] [] = {51, 52, 53},


{54, 55, 56} }¡
int tabla1 [] [] =
{51, 52, 53},
{54, 55, 56}

2. int tabla2 [] [] = {
{1, 2, 3, 4},
{s, 6, 7, s},
{9, la, 11, 12}

tabla1 [] []
o 2 Columnas

Filas o 51 52 53

54 55 56

tabla2 [ ] [ ]
o 2 3 " Columnas
Filas o 1 2 3 4

5 6 7 8

2 9 10 11 12

Figura 11.6. Tablas de dos dimensiones.

Java trata los arrays de dos o más dimensiones como array de arrays, por ello se pueden crear arrays
de dos dimensiones no cuadradas. En los siguientes ejemplos se crean arrays de distintos elementos
cada fila.
1. double tb[] [] = { {loS, -2.S}, {S. O, -0.0, loS} };
Se ha definido una matriz de dos filas, la primera con dos columnas y la segunda con tres.
2. int[]a = {1,3,S}, b = {2,4,6,8,10};
int mtb [] [] = {a, b};

Se ha definido el array a de tres elementos, el b de cuatro elementos y la matriz mtb de dos filas, la
primera con tres elementos o columnas, y la segunda con cuatro.
Se puede realizar la definición de una matriz en varias sentencias, primero especificando el núme-
ro de filas y a continuación el número de elementos de cada fila. En los siguientes ejemplos se crean
matrices de esta forma.

1. double [] [] gr = new double [3] [] ;


Se define la matriz gr de tres filas. A continuación, los elementos de cada fila.
gr[O] = new double[3];
gr[l] = new double[6];
gr[2] = new double[S];

2. int [] []pres = new int [4] [] ;


Se define la matriz de tipo entero pres de cuatro filas. A continuación, los elementos de cada fila
se definen con las sentencias:
pres[O] = VD;
pres[l] = VI;
pres[2] = V2;
pres [3] = V3;
Previamente hay que definir:

int va = {4,3,2,1}¡
int Vl = {7,6,5}¡
int V2 = {9,8}¡
int V3 = {a}¡

ventas

¡ length
ventas[O][O]
length
ventas[O]
ventas[1]
0][2]
ventas[2]

1][0] H
1][1] O
ventas[2][0] B
Figura 11.7. Disposición en memoria de ventas [] [1.

')l
. 11.5.2. Acceso a los elementos de los arrays bidimensionales
Se puede acceder a los elementos de arrays bidimensionales de igual forma que a los elementos de un
array unidimensional.La diferencia reside en que en los elementosbidimensionales deben especificar-
se los índices de la fila y la columna.
El formato general para asignación directa de valores a los elementos es:
inserción de elementos
.,
<nombre array> [indice fila] [indice columna]=valor elemento;
extracción de elementos .~

<variable> = <nombre array> [indice fila] [indice columna] ;


Algunos ejemplos de inserciones: ..

Tabla [2] [3] = 4.5;


Resistencias [2] [4] = 50;
AsientosLibres[S] [12] = 5;
Y de extracción de valores:
Ventas = Tabla [1] [1] ;
Dia = Semana [3] [6] ;

11.5.3. Lectura y escritura de elementos de arrays bidimensionales


Los métodos de entrada o salida se aplican de igual forma a los elementos de un array bidimensional.
Por ejemplo:
int tabla = new int [3] [4] ;
[] []

double resistencias [] [] = new double[4] [5] ;


boolean asientosLibres [] [] = new boolean [28] [18];
BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in));
tabla [1] [1] = Integer.parseInt(entrada.readLine());
System.out.println(tabla[l] [1]);
resistencias [2] [1] =
Double.valueOf(entrada.readLine()) .doubleValue();
if (asientosLibres [3] [1])
, System.out.println(UAsiento disponible") ;
else
System. out .println ("Asiento ocupado");

11.5.4. Acceso a elementos mediante bucles

Se puede acceder a los elementos de arrays bidimensionales mediante bucles anidados. Su sintaxis es:

int fila, col;


for (fila = O; fila < NumFilas; ++fila)
for (col = O; col < NumCol; ++col)
Procesar elemento Matriz [fila] [col] ;

El número de filas y de columnas se puede obtener con el atributo length. Con este atributo, la
sintaxis para acceder a los elementos:
<tipo> Matriz [] [] ;
<especificación de filas y columnas con operador new>
for (fila = O; fila < Matriz.length; ++fila)
for (col = O; col < Matriz [fila] .length; ++col)
Procesar elemento Matriz [fila] [col] ;

EJEMPLO 11.8. Define una tabla de discos, el número de filas y de columnas son datos de entrada.

Rellena la tabla con datos de entrada y se muestran por pantalla.

float discos [] [] ;
int fila, col, NumFilas, NumCols;
System.out.print("Número de filas: ");
System.out.flush() ;
NumFilas = Integer.parselnt(entrada.readLine());
System.out.print("Número de columnas: ");
System.out.flush() ;
NumCols = Integer.parselnt(entrada.readLine());'
discos = new float [NumFilas] [NumCols] ;
// Entrada de datos
for (fila = O; fila < NumFilas; fila++) {

for (col = O; col < NumCols; col++)


{

discos [fila] [col] =


Float.valueOf(entrada.readLine()) .floatValue();

/* Visual izar la tabla */


for (fila = O; fila < NumFilas; fila++)
{

for (col = O; col < NumCols; col++)


{

System. out. println ("Pts " + discos [fila] [col] ) ;


}

EJERCICIO 11.1. Lectura y visualización de un array de dos dimensiones.

El método leer () lee un array (una tabla) de dos dimensiones y el método visualizar.() presenta
la tablaen lapantalla. 0

import java.io.*;
class Tabla
{

public static void main(String [] a)throws IOException


{

int a [] [] = new int [3] [5] ;


leer (a) ;
visualizar(a);

static void leer (int a [] [])throws IOException


{

int i,j;
BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in)) i
System.out.println("Entrada de datos de la matriz");
for (i = O; i < a.length; i++)
{
System.out.println("Fila: " + i);
System.out.flush();
for (j = o; j < a[i] .length¡ j++)
a[i] [j]= Integer.parseIne(entrada.readLine());

static void visualizar (int a [] [])


{

int i,j;
System.out.println("\n\t Matriz leida\n");
for (i = O; i < a.length; i++)
{

for (j = O; j < a[i] .length; j++)


System.out.print(a[i][j] +" ");
System.out.println(" U);

Ejecución

La traza(ejecución) del programa:


Entrada de datos de la matriz

Fila o:
45
75
25
10
40
Fila 1:

Matriz leida
45 75 25 10 40
20 14 36 15 26
21 15 37 16 27

11.5.5. Arrays de más de dos dimensiones

Java proporciona la posibilidad de almacenar varias dimensiones, aunque raramente los datos del mun-
do real requieren más de dos o tres dimensiones. El medio más fácilde dibujar un array de tres dimen-
siones es imaginar un cubo tal como se muestra en la Figura 11.8.
Un array tridimensional se puede considerar como un conjunto de arrays bidimensionales combi-
nados juntos para formar, en profundidad, una tercera dimensión. El cubo se construye con filas(dimen-
sión vertical),columnas (dimensión horizontal) y planos (dimensión en profundidad). Por consiguien-
te, un dado se localiza
elemento especificando su plano, fila y columna. Una definiciónde un array
tridimensionalequipos es: .

int equipos [] [] [] = new int [3] [15] [10];


Un ejemplo típico de un array de tres dimensiones es el modelo libro, en el que cada página del
libro es un array bidimensional construido por filas y columnas. Así, por ejemplo, cada página tiene
cuarenta y cinco líneas que forman las filas del array y ochenta caracteres por línea, que forman las
columnas del array.Por consiguiente, si el libro tiene quinientas páginas, existirán quinientos planos y
el número de elementos será 500 x 80 x 45 = 1.800.000.

Figura11.8. Un array de tres dimensiones (4 x 5 x 3).

11.5.6. Una aplicación práctica

El array librotiene tres dimensiones [PAGINAS] [LINEAS] [COLUMNAS],que definen el tamaño


del array. El tipo de datos del array es char, ya que los elementos son caracteres.
¿Cómo se puede acceder a la información del libro? El métodó más fácil es mediante bucles anida-
dos. Dado que el libro se compone de un conjunto de páginas, el bucle más externo será el bucle de
página, y el bucle de columnas será el bucle más interno. Esto significa que el bucle de filas se inserta-
rá entre los bucles página y columna. El código siguiente permite procesar el array: .

int pagina, linea, columna;


final int PAGINAS = 500;
final int LINEAS =.45;
final int COLUMNAS = 80; .
char libro[] [] [] = new char[PAGINAS] [LINEAS] [COLUMNAS];
for (pagina = O; pagina < PAGINAS; ++pagina)
for (linea = O; linea < LINEAS; ++linea)
for (columna = O; columna < COLUMNAS; ++columna)
<procesarlibro[pagina] [linea] [columna] >

También podría gustarte