Está en la página 1de 60

ITSON Manuel Domitsu Kono

Tema 5
Arreglos y Cadenas en Java

Arreglos

Un arreglo es una lista de variables del mismo tipo que se encuentran en localidades
contiguas de memoria y que comparten el mismo nombre. Cada una de las variables de
la lista, llamadas elementos, puede ser accedida por el nombre del arreglo y su posicin
en l. Dependiendo de la distribucin lgica (no fsica) de sus elementos, los arreglos
pueden clasificarse en:

Unidimensionales, si visualizamos a los elementos acomodados en una fila (o
columna).
Bidimensionales, si los visualizamos acomodados en una tabla.
Tridimensionales, si los visualizamos acomodados en varias tablas formando una
estructura tridimensional.
Etc. No hay restricciones en el nmero de dimensiones que un arreglo pueda
tener.

Arreglos Unidimensionales

En un arreglo unidimensional, la posicin de un elemento en el arreglo est dada por un
valor entero llamado ndice que representa la distancia de ese elemento con respecto al
primer elemento del arreglo. Por ejemplo si deseamos almacenar las calificaciones de un
grupo de alumnos podemos tener un arreglo llamado califs formado de 50 variables:

cal i f s[ 0] representa la calificacin del primer alumno,
cal i f s[ 1] representa la calificacin del segundo alumno, etc.

El nmero entre corchetes es el ndice. Note que el primer elemento tiene un ndice igual
a 0 y el ltimo un ndice igual a n-1, donde n es el nmero de elementos del arreglo.



114 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
Referencia a un Arreglo Unidimensional

Al igual que con los objetos, el nombre de un arreglo es una referencia al arreglo, esto es,
utilizamos el nombre para acceder a los elementos del arreglo.

La sintaxis para declarar la referencia a un arreglo unidimensional es la siguiente:

tipo nomArreglo[];



tipo[] nomArreglo;

tipo es el tipo base del arreglo, el tipo de cada una de las variables que forman el
arreglo, y puede ser cualquier tipo de datos: primitivos o clases. nomArreglo es un
identificador, el nombre de la referencia al arreglo.

Por ejemplo:

i nt cal i f s[ ] ;
doubl e[ ] pr eci os;
Canci on canci ones[ ] ;
Creacin de un Arreglo Unidimensional

Al igual que con los objetos, los arreglos deben crearse antes de emplearse, esto reserva
memoria para el arreglo. La sintaxis para crear un arreglo es la siguiente:

nomArreglo = new tipo[tamArreglo];

tamArreglo es una expresin de tipo entero que indica el tamao del arreglo, el nmero
de variables de la lista. Los corchetes encerrando a tamArreglo no indican que ste sea
opcional. Aqu forman parte de la sintaxis de la creacin de un arreglo.

Por ejemplo:

cal i f s = new i nt [ 50] ;
pr eci os = new doubl e[ 100] ;
canci ones = new Canci on[ 20] ;

La declaracin de la referencia a un arreglo y el reservado de memoria para el mismo
pueden combinarse en una sentencia cuya sintaxis es:

tipo nomArreglo[] = new tipo[tamArreglo];



Tema 5 Arreglos y Cadenas en Java 115
ITSON Manuel Domitsu Kono
tipo[] nomArreglo = new tipo[tamArreglo];

Por ejemplo:

i nt cal i f s[ ] = new i nt [ 50] ;
doubl e[ ] pr eci os = new doubl e[ 100] ;
Canci on canci ones[ ] = new Canci on[ 20] ;
Inicializacin de Arreglos Unidimensionales

Los arreglos al igual que las variables de los tipos bsicos pueden inicializarse al
momento de crearse. La sintaxis para inicializar un arreglo es

tipo nomArreglo[] = {cte1 [ , cte2] . . . }


tipo[] nomArreglo = {cte1 [ , cte2] . . . }

Donde cte1 [ , cte2] . . . es una lista de constantes encerrada entre llaves, { y },
que son los valores a los que se inicializan los elementos del arreglo. El tamao del
arreglo es el nmero de constantes. Por ejemplo, en la declaracin

i nt x[ ] = {0, 1, 2, 3, 4};

estamos declarando al arreglo x y lo estamos inicializando a:

x 0 1 2 3 4
Acceso a los elementos de un Arreglo Unidimensional

Para acceder a un elemento de un arreglo unidimensional se utiliza el nombre del
elemento, tal como lo haramos con cualquier variable. El nombre de cada elemento de un
arreglo est formado por el nombre del arreglo y su posicin en el arreglo. Esta posicin
se conoce como el ndice del elemento. El ndice del primer elemento de un arreglo
siempre es cero. El ndice de un elemento puede expresarse mediante cualquier
expresin entera que al evaluarse nos indica el elemento en particular al que queremos
acceder. Por ejemplo

cal i f s[ 4] = 8;

le asigna al quinto elemento del arreglo cal i f s el valor de 8.

cal i f s[ i ]

accede al i-simo elemento del arreglo cal i f s, mientras que

mat s[ j + 3]
116 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
accede al j-simo +3 elemento del arreglo mat s.

Por ejemplo supongamos que deseamos acceder en forma secuencial a los elementos
del arreglo cal i f s para sacar el promedio de las calificaciones. El cdigo para hacer
esto sera

suma = 0;
f or ( i = 0; i < nAl umnos; i ++) suma += cal i f s[ i ] ;
pr omedi o = ( doubl e) suma/ nAl umnos;

donde nAl umnos es el nmero de calificaciones que estn almacenadas en el arreglo.
Este valor puede ser menor o igual al tamao del arreglo cal i f s.

Cada vez que se le asigna un valor u objeto a un elemento de un arreglo, el sistema de
ejecucin de J ava verifica que el tipo del arreglo sea compatible con el tipo del valor u
objeto asignrsele. Si no son compatibles ocurre una excepcin del tipo:
j ava. l ang. Ar r aySt or eExcept i on.

Cada vez que se accede a un elemento de un arreglo, el sistema de ejecucin de J ava
verifica que el valor del ndice es un valor vlido, esto es, que es nmero comprendido
entre 0 y tamArreglo 1. De no ser as ocurre una excepcin del tipo:
j ava. l ang. Ar r ayI ndexOut Of BoundsExcept i on.
Arreglos Unidimensionales y Mtodos

En J ava los arreglos son objetos. Podemos obtener el tamao del arreglo en elementos
de la siguiente manera:

nomAr r egl o. l engt h

En J ava podemos pasarle como parmetro a un mtodo, una referencia a un arreglo. No
se le est pasando una copia del arreglo, slo la referencia. La sintaxis de un parmetro
que representa la referencia a un arreglo unidimensional es la siguiente:

tipo nomParArreglo[]

donde tipo es el tipo base del arreglo y nomParArreglo es el nombre del parmetro
que representa la referencia al arreglo. Note que los corchetes estn vacos.

Al llamar al mtodo, el argumento ser la referencia al arreglo, el cual es el nombre del
arreglo:

nomArreglo

Tambin es posible que un mtodo nos regrese una referencia a un arreglo. La sintaxis
para declarar que el mtodo regresa una referencia a un arreglo unidimensional es:

Tema 5 Arreglos y Cadenas en Java 117
ITSON Manuel Domitsu Kono
tipo[] nomMetodo() {
. . .
}

donde tipo es el tipo base del arreglo y nomMetodo es el nombre del mtodo que nos
regresa la referencia a un arreglo.
Ejemplos Sobre Arreglos Unidimensionales

Para el ejemplo del programa del amante de la msica y el cine, se desea implementar
un mecanismo que permita catalogar (almacenar y consultar) su coleccin. En este
tema el mecanismo se implementar usando arreglos, aunque los arreglos no permiten
almacenar permanentemente los datos. Ms adelante se modificar este mecanismo
para que emplee archivos y una base de datos.

Dado que los arreglos tienen un tamao fijo definido al tiempo de compilacin, es
posible que el arreglo se llene y no se puedan agregar ms datos. En lugar de verificar
si hay espacio en el arreglo para almacenar un dato, dejaremos que el sistema de
ejecucin de J ava lance una excepcin del tipo
j ava. l ang. Ar r ayI ndexOut Of BoundsExcept i on si queremos acceder ms all de
los lmites del arreglo, atraparemos esa excepcin y relanzaremos una excepcin
encadenada del tipo Per si st enci aExcept i on. Por otro lado si al querer modificar o
eliminar un dato, el dato no existe, tambin se lanzar una excepcin del tipo
Per si st enci aExcept i on. El siguiente cdigo muestra la implementacin de la
excepcin Per si st enci aExcept i on.

PersistenciaException.java
/ *
* Per si st enci aExcept i on. j ava
*
* Cr eada el 13 de sept i embr e de 2007, 12: 01 AM
*/

package excepci ones;

/ **
* Est a cl ase r epr esent a a l as excepci ones l anzadas por l as cl ases
* que encapsul an l a per si st enci a.
*
* @aut hor mdomi t su
*/
publ i c cl ass Per si st enci aExcept i on ext ends Runt i meExcept i on {
/ **
* Const r uct or por omi si n. Const r uye una excepci n con un mensaj e de er r or
* nul o.
*/
publ i c Per si st enci aExcept i on( ) {
}

/ **
* Const r uye una excepci n con el mensaj e de er r or del par met r o.
118 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
* @par ammsj Mensaj e de er r or .
*/
publ i c Per si st enci aExcept i on( St r i ng msj ) {
super ( msj ) ;
}

/ **
* Const r uye una excepci n con el mensaj e de er r or del par met r o y l a causa
* or i gi nal del er r or .
* @par ammsj Mensaj e de er r or .
* @par amcausa Causa or i gi nal del er r or .
*/
publ i c Per si st enci aExcept i on( St r i ng msj , Thr owabl e causa) {
super ( msj , causa) ;
}

/ **
* Const r uye una excepci n l a causa or i gi nal del er r or .
* @par amcausa Causa or i gi nal del er r or .
*/
publ i c Per si st enci aExcept i on( Thr owabl e causa) {
super ( causa) ;
}
}

Para encapsular el mecanismo de almacenamiento de los datos se construyen cuatro
clases nuevas: Medi os, Canci ones, Pel i cul as y Gener os se muestran en el
diagrama de clases de la figura 5.1

Figura 5.1
Tema 5 Arreglos y Cadenas en Java 119
ITSON Manuel Domitsu Kono
La clase Medi os tiene como atributos una referencia a un arreglo de tipo Medi o y un
entero con el nmero de medios en el catlogo. Los mtodos de la clase Medi os
permiten buscar un medio dentro del catlogo dada su clave, agregar, actualizar y
eliminar un medio al catlogo, listar los medios que sean de un gnero dado, listar los
medios que sean de un perodo dado y listar el catlogo. El cdigo parcial de la clase
Medi os es el siguiente:

Medios.java
/ *
* Medi os. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/

package per si st enci a;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. Medi o;
i mpor t excepci ones. Per si st enci aExcept i on;

/ **
* Est a cl ase per mi t e al macenar , act ual i zar , el i mi nar y consul t ar
* medi os ( canci ones y pel cul as) del pr ogr ama Amant eMusi ca.
* Los dat os se al macenan en ar r egl os.
*
* @aut hor mdomi t su
*/
publ i c cl ass Medi os {
pr ot ect ed Medi o medi os[ ] ;
pr ot ect ed i nt numMedi os = 0;

/ **
* Busca el medi o del par met r o en el ar r egl o. Las cl aves de l os medi os del
* ar r egl o y del par amet r o deben coi nci di r
* @par ammedi o Medi o a buscar
* @r et ur n La posi ci n del medi o buscado si se encuent r a,
* - 1 en caso cont r ar i o
*/
publ i c i nt i ndi ce( Medi o medi o) {
/ / Recor r e l i neal ment e el ar r egl o en busca del medi o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si l o haya r egr esa su ndi ce
i f ( medi o. equal s( medi os[ i ] ) ) r et ur n i ;
}
/ / si no, r egr esa - 1
r et ur n - 1;
}

/ **
* Regr esa el medi o del ar r egl o que coi nci da con el medi o del par amet r o.
* Las cl aves de l os medi os del ar r egl o y del par amet r o deben coi nci di r
* @par ammedi o Medi o con l a cl ave del medi o a r egr esar
* @r et ur n El medi o cuya cl ave es i gual a l a cl ave del medi o
120 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
* dado por el par met r o, si se encuent r a, nul l en caso cont r ar i o
*/
publ i c Medi o obt en( Medi o medi o) {
/ / Busca el ndi ce del medi o de cl ave
i nt pos = i ndi ce( medi o) ;

/ / Si l o encont r , r egr sal o
i f ( pos >= 0) r et ur n medi os[ pos] ;

/ / si no, r egr esa nul l
r et ur n nul l ;
}

/ **
* Agr ega un medi o al ar r egl o de medi os
* @par ammedi o Medi o a agr egar .
* @t hr ows Per si st enci aExcept i on Si el cat l ogo est l l eno
*/
publ i c voi d agr ega( Medi o medi o) t hr ows Per si st enci aExcept i on {
/ / Si no hay espaci o en el ar r egl o no se agr ega
i f ( numMedi os >= medi os. l engt h)
t hr ow new Per si st enci aExcept i on( "Ar r egl o l l eno") ;

/ / Agr ega l a canci n o pel cul a al ar r egl o
medi os[ numMedi os] = medi o;
numMedi os++;
}

/ **
* Act ual i za el medi o del ar r egl o que coi nci da con el medi o del par amet r o.
* Las cl aves de l os medi os del ar r egl o y del par amet r o deben coi nci di r
* @par ammedi o Medi o a act ual i zar .
* @t hr ows Per si st enci aExcept i on Si el medi o no exi st e.
*/
publ i c voi d act ual i za( Medi o medi o) t hr ows Per si st enci aExcept i on {
i nt pos;

/ / Busca un medi o con l a mi sma cl ave.
pos = i ndi ce( medi o) ;

/ / Si no l o hay, no se act ual i za
i f ( pos < 0) t hr ow new Per si st enci aExcept i on( "Medi o i nexi st ent e") ;

/ / Si l o hay, act ual i zal o
medi os[ pos] = medi o;
}

/ **
* El i mi na el medi o del ar r egl o que coi nci da con el medi o del par amet r o.
* Las cl aves de l os medi os del ar r egl o y del par amet r o deben coi nci di r
* @par ammedi o Medi o a el i mi nar .
* @t hr ows Per si st enci aExcept i on Si el medi o no exi st e.
*/
publ i c voi d el i mi na( Medi o medi o) t hr ows Per si st enci aExcept i on {
i nt pos;

/ / Busca un medi o con l a mi sma cl ave.
Tema 5 Arreglos y Cadenas en Java 121
ITSON Manuel Domitsu Kono
pos = i ndi ce( medi o) ;

/ / Si no l o hay, no se bor r a
i f ( pos < 0) t hr ow
new Per si st enci aExcept i on( "La Canci n o Pel cul a no exi st e") ;

/ / Si l o hay, bor r al o
medi os[ pos] = nul l ;
empaca( ) ;
}

/ **
* El i mi na l os medi os que se hayan el i mi nado, r ecor r i endo el r est o una
* posi ci n haci a adel ant e
*/
pr i vat e voi d empaca( ) {
f or ( i nt i =0; i < numMedi os; i ++) {
/ / Si encuent r a un medi o bor r ado
i f ( medi os[ i ] == nul l ) {

/ / Recor r e t odas l os medi os una posi ci on haci a
/ / ar r i ba par a r ecuper ar el espaci o
f or ( i nt j =i ; j < numMedi os- 1; j ++) {
medi os[ j ] = medi os[ j +1] ;
}
numMedi os- - ;
}
}
}

. . .
}

La clase Canci ones crea un arreglo de tipo Canci on que contendr el catlogo de
canciones. Los mtodos de la clase Canci ones permiten obtener una cancin dada su
clave, listar las canciones que sean de un intrprete, de un autor o de un lbum dado. El
cdigo parcial de la clase Canci ones es el siguiente.

Canciones.java
/ *
* Canci ones. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/

package per si st enci a;

i mpor t obj et osNegoci o. Canci on;

/ **
* Est a cl ase per mi t e consul t ar canci ones del pr ogr ama Amant eMusi ca
* Los dat os se al macenan en ar r egl os.
*
* @aut hor mdomi t su
*/
122 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
publ i c cl ass Canci ones ext ends Medi os {
/ / Ar r egl o par a al macenar l as canci ones
pr i vat e Canci on canci ones[ ] ;

/ **
* Cr ea el ar r egl o par a al macenar l as canci ones de t amao i gual al par met r o
* @par amt amCat al ogo Tamao del ar r egl o canci ones
*/
publ i c Canci ones( i nt t amCat al ogo) {
/ / Cr ea el ar r egl o par a al macenar l as canci ones
canci ones = new Canci on[ t amCat al ogo] ;

/ / Hace que l a r ef er enci a medi os de l a cl ase Medi os apunt e al ar r egl o
/ / canci ones
medi os = canci ones;
}

/ **
* Regr esa l a canci n del ar r egl o cuya cl ave coi nci da con l a cl ave
* de l a canci n dado por el par met r o
* @par amcanci on Canci n con l a cl ave de l a canci n a r egr esar
* @r et ur n La canci n cuya cl ave es i gual a l a cl ave de l a canci n dada por
* el par met r o
*/
publ i c Canci on obt en( Canci on canci on) {
/ / Obt i ene l a canci n i nvocando al mt odo obt en( ) de l a cl ase padr e Medi os
r et ur n ( Canci on) super . obt en( canci on) ;
}

. . .
}

La clase Pel i cul as crea un arreglo de tipo Pel i cul a que contendr el catlogo de
pelculas. Los mtodos de la clase Pel i cul as permiten obtener una pelcula dada su
clave, listar las pelculas que sean de un actor o de un director dados. El cdigo parcial de
la clase Peliculas es el siguiente.

Peliculas.java
/ *
* Pel i cul as. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/
package per si st enci a;

i mpor t obj et osNegoci o. Pel i cul a;

/ **
* Est a cl ase per mi t e consul t ar pel cul as del pr ogr ama Amant eMusi ca
* Los dat os se al macenan en ar r egl os.
*
* @aut hor mdomi t su
*/
publ i c cl ass Pel i cul as ext ends Medi os {
/ / Ar r egl o par a al macenar l as pel cul as
Tema 5 Arreglos y Cadenas en Java 123
ITSON Manuel Domitsu Kono
pr i vat e Pel i cul a pel i cul as[ ] ;

/ **
* Cr ea el ar r egl o par a al macenar l as pel i cul as de t amao i gual al par met r o
* @par amt amCat al ogo amCat al ogo Tamao del ar r egl o pel i cul as
*/
publ i c Pel i cul as( i nt t amCat al ogo) {
/ / Cr ea el ar r egl o par a al macenar l as pel cul as
pel i cul as = new Pel i cul a[ t amCat al ogo] ;

/ / Hace que l a r ef er enci a medi os de l a cl ase Medi os apunt e al ar r egl o
/ / pel i cul as
medi os = pel i cul as;
}

/ **
* Regr esa l a pel cul a del ar r egl o cuya cl ave coi nci da con l a cl ave
* de l a pel cul a dado por el par met r o
* @par ampel i cul a Pel cul a con l a cl ave de l a pel cul a a r egr esar
* @r et ur n La pel cul a cuya cl ave es i gual a l a cl ave de l a pel cul a
* dada por el par met r o
*/
publ i c Pel i cul a obt en( Pel i cul a pel i cul a) {
/ / Obt i ene l a canci n i nvocando al mt odo obt en( ) de l a cl ase padr e Medi os
r et ur n ( Pel i cul a) super . obt en( pel i cul a) ;
}

. . .
}

La clase Gener os tiene como atributos una referencia a un arreglo de tipo Gener o y un
entero con el nmero de gneros en el catlogo. Los mtodos de la clase Gener os
permiten buscar un gnero dentro del catlogo dada su clave, agregar, actualizar y
eliminar un gnero al catlogo, listar el catlogo. El cdigo parcial de la clase Gener os
es el siguiente:

Generos.java
/ *
* Gener os. j ava
*
* Cr eada el 30 de j ul i o de 2008, 11: 36 AM
*/

package per si st enci a;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osNegoci o. Gener o;
i mpor t excepci ones. Per si st enci aExcept i on;

/ **
* Est a cl ase per mi t e al macenar , act ual i zar , el i mi nar y consul t ar
* gener os de canci ones y pel cul as del pr ogr ama Amant eMusi ca.
* Los dat os se al macenan en ar r egl os.
*
124 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
* @aut hor mdomi t su
*/
publ i c cl ass Gener os {
pr ot ect ed Gener o gener os[ ] ;
pr ot ect ed i nt numGener os = 0;

/ **
* Cr ea el ar r egl o par a al macenar l os gner os de t amao i gual al par met r o
* @par amt amCat al ogo Tamao del ar r egl o gener os
*/
publ i c Gener os( i nt t amCat al ogo) {
/ / Cr ea el ar r egl o par a al macenar l os gner os
gener os = new Gener o[ t amCat al ogo] ;
}

/ **
* Busca el gener o del par met r o en el ar r egl o. Las cl aves de l os gener os del
* ar r egl o y del par amet r o deben coi nci di r
* @par amgener o Gener o a buscar
* @r et ur n La posi ci n del gener o buscado si se encuent r a,
* - 1 en caso cont r ar i o
*/
publ i c i nt i ndi ce( Gener o gener o) {
/ / Recor r e l i neal ment e el ar r egl o en busca del gener o
f or ( i nt i = 0; i < numGener os; i ++) {
/ / Si l o hal l a r egr esa su ndi ce
i f ( gener o. equal s( gener os[ i ] ) ) r et ur n i ;
}
/ / si no, r egr esa - 1
r et ur n - 1;
}

/ **
* Regr esa el gener o del ar r egl o que coi nci da con el gener o del par amet r o.
* Las cl aves de l os gener os del ar r egl o y del par amet r o deben coi nci di r
* @par amgener o Gener o con l a cl ave del gener o a r egr esar
* @r et ur n El gener o cuya cl ave es i gual a l a cl ave del gener o
* dado por el par met r o, si se encuent r a, nul l en caso cont r ar i o
*/
publ i c Gener o obt en( Gener o gener o) {
/ / Busca un gener o con l a mi sma cl ave.
i nt pos = i ndi ce( gener o) ;

/ / Si l o encont r , r egr sal o
i f ( pos >= 0) r et ur n gener os[ pos] ;

/ / si no, r egr esa nul l
r et ur n nul l ;
}

/ **
* Agr ega un gener o al ar r egl o de gener os
* @par amgener o Gener o a agr egar .
* @t hr ows Per si st enci aExcept i on Si el cat l ogo est l l eno
*/
publ i c voi d agr ega( Gener o gener o) t hr ows Per si st enci aExcept i on {
i nt pos;
Tema 5 Arreglos y Cadenas en Java 125
ITSON Manuel Domitsu Kono

/ / Si no hay espaci o en el ar r egl o no se agr ega
i f ( numGener os >= gener os. l engt h)
t hr ow new Per si st enci aExcept i on( "Ar r egl o l l eno") ;

/ / Se agr ega el gener o
gener os[ numGener os] = gener o;
numGener os++;
}

/ **
* Act ual i za el gener o del ar r egl o que coi nci da con el gener o del par amet r o.
* Las cl aves de l os gener os del ar r egl o y del par amet r o deben coi nci di r
* @par amgener o Gner o a act ual i zar .
* @t hr ows Per si st enci aExcept i on Si el gner o no exi st e.
*/
publ i c voi d act ual i za( Gener o gener o) t hr ows Per si st enci aExcept i on {
i nt pos;

/ / Busca un gener o con l a mi sma cl ave.
pos = i ndi ce( gener o) ;

/ / Si no l o hay, no se act ual i za
i f ( pos < 0) t hr ow new Per si st enci aExcept i on( "Gner o i nexi st ent e") ;

/ / Si l o hay, act ual i zal o
gener os[ pos] = gener o;
}

/ **
* El i mi na el gener o del ar r egl o que coi nci da con el gener o del par amet r o.
* Las cl aves de l os gener os del ar r egl o y del par amet r o deben coi nci di r
* @par amgener o Gener o a el i mi nar .
* @t hr ows Per si st enci aExcept i on Si el gner o no exi st e.
*/
publ i c voi d el i mi na( Gener o gener o) t hr ows Per si st enci aExcept i on {
i nt pos;

/ / Busca un gener o con l a mi sma cl ave.
pos = i ndi ce( gener o) ;

/ / Si no l o hay, no se bor r a
i f ( pos < 0) t hr ow new Per si st enci aExcept i on( "Gner o i nexi st ent e") ;

/ / Si l o hay, bor r al o
gener os[ pos] = nul l ;
empaca( ) ;
}

/ **
* El i mi na l os gener os que se hayan el i mi nado, r ecor r i endo el r est o una
* posi ci n haci a adel ant e
*/
pr i vat e voi d empaca( ) {
/ / Recor r e l i neal ment e el ar r egl o en busca de gener os el i mi nados
f or ( i nt i =0; i < numGener os; i ++) {
/ / Si encuent r a un gener o bor r ado
126 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
i f ( gener os[ i ] == nul l ) {

/ / Recor r e t odas l os gener os una posi ci on haci a
/ / ar r i ba par a r ecuper ar el espaci o
f or ( i nt j =i ; j < numGener os- 1; j ++) {
gener os[ j ] = gener os[ j +1] ;
}
numGener os- - ;
}
}
}

. . .
}

Arreglos Multidimensionales

En un arreglo bidimensional, la posicin de un elemento en el arreglo est dada dos
valores que representan el rengln y la columna del elemento en la tabla. En un arreglo
tridimensional, la posicin de un elemento en el arreglo est dada por tres valores que
representan la tabla, el rengln y la columna del elemento en el arreglo, etc.
Referencia a Arreglos Multidimensionales

Las sintaxis para declarar referencias a arreglos en dos, tres, ... dimensiones son las
siguientes:

tipo nomArreglo[][];
tipo nomArreglo[][][];
. . .

tipo[][] nomArreglo;
tipo[][][] nomArreglo;
. . .

tipo es el tipo base del arreglo y puede ser es cualquier tipo primitivo o clase. .
nomArreglo es un identificador, el nombre de la referencia al arreglo.

Por ejemplo:

i nt cal Par s[ ] [ ] ;
doubl e[ ] [ ] [ ] vent as;
Creacin de Arreglos Multidimensionales

Para crear arreglos en dos, tres, ... dimensiones se usa las siguientes sintaxis:

Tema 5 Arreglos y Cadenas en Java 127
ITSON Manuel Domitsu Kono
nomArreglo = new tipo[numFilas][numCols];
nomArreglo = new tipo[numTablas][numFilas][numCols];
. . .

numTablas, numFilas, numCols son expresiones enteras que representan los
nmeros de tablas, filas y columnas de los arreglos.

Por ejemplo:

cal Par s = new i nt [ 4] [ 50] ;
vent as = new doubl e[ 3] [ 4] [ 12] ;

La declaracin de referencias a arreglos multidimensionales y el reservado de memoria
para ellos mismos pueden combinarse. Por ejemplo la sintaxis para declarar y crear
arreglos bidimensionales y tridimensionales es:

tipo nomArreglo[][] = new tipo[numFilas][numCols];
tipo nomArreglo[][][] = new tipo[numTablas][numFilas][numCols];



tipo[][] nomArreglo = new tipo[numFilas][numCols];
tipo[][][] nomArreglo = new tipo[numTablas][numFilas][numCols];

Por ejemplo:

i nt cal Par s[ ] [ ] = new i nt [ 4] [ 50] ;
doubl e[ ] [ ] [ ] vent as = new doubl e[ 3] [ 4] [ 12] ;
Inicializacin de Arreglos Multidimensionales

Los arreglos multidimensionales tambin pueden inicializarse al momento de declararse.
Por ejemplo la siguiente declaracin

i nt x[ ] [ ] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};

declara al arreglo x y lo inicializa a

0 1 2
x 3 4 5
6 7 8

Un ejemplo de la inicializacin de un arreglo en tres dimensiones sera:

i nt y[ ] [ ] [ ] = {{{0, 1}, {2, 3}, {4, 5}},
{{6, 7}, {8, 9}, {10, 11}}
{{12, 13}, {14, 15}, {16, 17}}
{{18, 19}, {20, 21}, {22, 23}}};

128 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
Acceso a los elementos de un Arreglo
Multidimensional

El acceso a los elementos de un arreglo multidimensional es similar al visto para los
arreglos en una dimensin, nada ms que en lugar de usar un slo ndice utilizaremos
ndices mltiples, dos ndices para un arreglo en dos dimensiones, tres para un arreglo en
tres dimensiones, etc. Por ejemplo

cal Par s[ 4] [ 2] = 9;

le asigna al elemento que se encuentra en la quinta fila, tercera columna del arreglo
calPars el valor de 9.

vent as[ 2] [ 3] [ 1] = 1252. 30

le asigna al elemento que se encuentra en el tercer plano, cuarta fila, segunda columna
del arreglo ventas el valor de 1252.30.

Por ejemplo el siguiente cdigo nos permite calcular el promedio de las calificaciones de
cada alumno y la calificacin promedio del grupo:

i nt i , j , suma;
doubl e sumaT, pr omedi oT;
i nt cal Par s[ ] [ ] = new i nt [ 50] [ 4] ;
doubl e pr omedi os[ ] = new doubl e[ 50] ;

. . .
sumaT = 0;
f or ( i = 0; i < nAl ums; i ++)
{
suma = 0;
f or ( j = 0; j < 4; j ++) suma += cal Par s[ i ] [ j ] ;
pr omedi os[ i ] = ( doubl e) suma/ 4;
sumaT += pr omedi os[ i ] ;
}
pr omedi oT = sumaT/ nAl ums;

En realidad los arreglos multidimensionales son arreglos de arreglos. Un arreglo
bidimensional es un arreglo donde cada elemento del arreglo es a su vez un arreglo
unidimensional. Un arreglo tridimensional es un arreglo donde cada elemento del arreglo
es a su vez un arreglo bidimensional, etc.

Cada uno de los arreglos individuales de un arreglo multidimensional puede ser
referenciado independientemente. Por ejemplo, para las declaraciones:

i nt cal Par s[ ] [ ] = new i nt [ 4] [ 50] ;
doubl e[ ] [ ] [ ] vent as = new doubl e[ 3] [ 4] [ 12] ;

Tema 5 Arreglos y Cadenas en Java 129
ITSON Manuel Domitsu Kono
cal Par s[ i ] es una referencia al i-simo arreglo unidimensional del arreglo bidimensional
cal Par s, esto es, el i-simo rengln de la tabla cal Par s; vent as[ i ] es una referencia al i-
simo arreglo bidimensional del arreglo tridimensional vent as, esto es, la i-sima tabla del
arreglo tridimensional vent as; y vent as[ i ] [ j ] es una referencia al i-simo, j-simo
arreglo unidimensional del arreglo tridimensional vent as, esto es, al j-simo rengln de la
i-sima tabla del arreglo tridimensional vent as.
Arreglos Multidimensionales y Mtodos

Al igual que con los arreglos unidimensionales, en J ava podemos pasarle como
parmetro a un mtodo, una referencia a un arreglo multidimensional. La sintaxis de los
parmetros que representan las referencias a arreglos en dos y tres dimensiones es,
respectivamente:

tipo nomParArreglo[][]
tipo nomParArreglo[][][]

donde tipo es el tipo base del arreglo y nomParArreglo es el nombre del parmetro
que representa la referencia al arreglo. Note que los corchetes estn vacos.

Al llamar al mtodo, el argumento ser la referencia al arreglo, el cual es el nombre del
arreglo:

nomArreglo

Tambin es posible que un mtodo nos regrese una referencia a un arreglo
multidimensional. La sintaxis para declarar mtodos que regresan referencias a arreglos
en dos y tres dimensiones es, respectivamente:

tipo[][] nomMetodo() {
. . .
}

tipo[][][] nomMetodo() {
. . .
}


donde tipo es el tipo base del arreglo y nomMetodo es el nombre del mtodo que nos
regresa la referencia a un arreglo.




130 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
Cadenas

J unto con el procesamiento numrico, una de las tareas que ms frecuentemente realiza
la computadora es el procesamiento de textos. Algunas de las aplicaciones en las que se
utiliza el procesamiento de texto son:

Bases de datos como directorios telefnicos, nminas de una empresa,
expedientes de alumnos de una escuela, etc.
Procesadores de palabras y programas para publicacin
Compiladores e intrpretes.

Todos los programas anteriores requieren de la capacidad de almacenar y manipular
texto, es decir, secuencias de caracteres. A estas secuencias de caracteres se les conoce
como cadenas. En una computadora slo se pueden almacenar nmeros y por lo tanto
cada uno de los caracteres de una cadena es codificado mediante un nmero. El
esquema de codificacin ms empleado en las computadoras es el esquema de
codificacin ASCII (por las siglas en ingls del comit que lo creo: American Standard
Code for Information Interchange), el cual codifica cada carcter mediante un nmero en
el rango 0 127, por lo que este esquema slo permite codificar 128 caracteres, lo que es
insuficiente para representar todos los caracteres empleados en los diferentes lenguajes
empleados en los diferentes pases. Debido a esto, J ava utiliza para codificar los
caracteres un nuevo esquema de codificacin llamado Unicode. Unicode provee un
cdigo nico para cada carcter, sin importar la plataforma, programa o lenguaje. Para
lograr esto Unicode utiliza dos bytes para codificar cada carcter, lo que le permite
representar 65,536 caracteres diferentes. Por compatibilidad con el cdigo ASCII, los
primeros 128 cdigos de Unicode se utilizan para representar los mismos caracteres que
los representados por el cdigo ASCII.

Para el manejo de cadenas, la API de J ava nos proporciona varias clases entre ellas las
clases St r i ng y St r i ngBuf f er .
Clase String

La clase St r i ng representa una cadena de caracteres. Las instancias de la clase
St r i ng son constantes. Su valor no puede cambiarse despus de ser creadas.

Todas las literales de tipo cadena en J ava se implementan como instancias de la clase
String. Por ejemplo, la siguiente literal:

" Hol a"

crea una instancia de tipo St r i ng con la secuencia de caracteres: H, o, l, a.

Tema 5 Arreglos y Cadenas en Java 131
ITSON Manuel Domitsu Kono
Al igual que con cualquier otro objeto, podemos declarar una referencia a St r i ng y al
mismo tiempo crear un objeto y asocirselo. Por ejemplo:

St r i ng mensaj e = " Hol a" ;

El lenguaje J ava define el operador (+) para concatenacin cadenas y el operador (+=)
que combina la concatenacin con la asignacin. Por ejemplo, siguiendo la declaracin
anterior, podemos tener la siguiente sentencia:

mensaj e = mensaj e + " J uan" ;

la cual es equivalente a:

mensaj e += " J uan" ;

Las sentencias anteriores podran interpretarse como que la cadena mensaje ha
cambiado su contenido al agregrsele la cadena " J uan" . Sin embargo, lo que ha
pasado es que al concatenarse las cadenas mensaj e y " J uan" , se crea un nuevo
objeto de tipo St r i ng con la cadena resultante y este nuevo objeto se asigna a la
referencia mensaj e.

El lenguaje J ava tambin define la conversin de objetos a cadenas mediante el
mtodo t oSt r i ng( ) definido para la clase Obj ect de la cual heredan todas las
clases de J ava.

La Clase String posee un conjunto muy rico de mtodos. La tabla 5.1 muestra algunos de
esos mtodos:

Tabla 5.1 Algunos Mtodos de la Clase String
public String(char[] value)

Construye una cadena con la secuencia de caracteres contenida en el arreglo dado por el
parmetro.

Parmetro:
val ue Caracteres con los que se formar la cadena

Lanza:
Nul l Poi nt er Except i on Si el arreglo val ue es nulo.
public String(StringBuffer buffer)

Construye una cadena con la secuencia de caracteres contenida en el objeto de tipo
St r i ngBuf f er dado por el parmetro.

Parmetro:
buf f er Objeto del tipo St r i ngBuf f er con los caracteres con los que se formar la cadena

Lanza:
Nul l Poi nt er Except i on Si buf f er es nulo.
132 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
Tabla 5.1 Algunos Mtodos de la Clase String. Continuacin
public char charAt(int index)

Regresa el carcter cuyo ndice est dado por el parmetro. El primer carcter tiene ndice 0.

Parmetro:
i ndex ndice del carcter deseado.

Regresa:
El carcter con el ndice dado por el parmetro.

Lanza:
I ndexOut Of BoundsExcept i on Si el ndice es negativo o mayor que la longitud de esta
cadena.
public int compareTo(String str)

Compara lexicogrficamente esta cadena con la cadena dada por el parmetro.

Parmetro:
st r Cadena con la que se va a comparar esta cadena.

Regresa:
El valor de 0 si esta cadena es igual a la cadena dada por el parmetro.
Un valor menor que 0 si esta cadena es menor lexicogrficamente que la cadena dada por el
parmetro.
Un valor mayor que 0 si esta cadena es mayor lexicogrficamente que la cadena dada por el
parmetro.

Lanza:
Nul l Poi nt er Except i on Si la cadena dada por el parmetro es nul l .

Una cadena es menor lexicogrficamente que otra si apareciera listada en un diccionario antes que la otra.
public int compareToIgnoreCase(String str)

Compara lexicogrficamente esta cadena con la cadena dada por el parmetro sin considerar
maysculas. Una cadena es menor lexicogrficamente que otra si apareciera listada en un
diccionario antes que la otra.

Parmetro:
st r Cadena con la que se va a comparar esta cadena.

Regresa:
El valor de 0 si esta cadena es igual a la cadena dada por el parmetro.
Un valor menor que 0 si esta cadena es menor lexicogrficamente que la cadena dada por el
parmetro.
Un valor mayor que 0 si esta cadena es mayor lexicogrficamente que la cadena dada por el
parmetro.

Lanza:
Nul l Poi nt er Except i on Si la cadena dada por el parmetro es nul l .




Tema 5 Arreglos y Cadenas en Java 133
ITSON Manuel Domitsu Kono
Tabla 5.1 Algunos Mtodos de la Clase String. Continuacin.
public boolean contentEquals(StringBuffer buffer)

Regresa t r ue si y slo s esta cadena representa la misma secuencia que el objeto de tipo
St r i ngBuf f er dado por el parmetro, f al se en caso contrario.

Parmetro:
buf f er Objeto de tipo St r i ngBuf f er con el que se va a comparar esta cadena.

Regresa:
t r ue si y slo s esta cadena representa la misma secuencia que el objeto de tipo St r i ngBuf f er
dado por el parmetro, f al se en caso contrario.

Lanza:
Nul l Poi nt er Except i on Si la cadena dada por el parmetro es nul l .
public boolean endsWith(String suffix)

Regresa t r ue si y slo s esta cadena termina con la misma secuencia de caracteres que la
cadena dada por el parmetro, f al se en caso contrario.

Parmetro:
suf f i x Cadena sufija.

Regresa:
t r ue si y slo s esta cadena termina con la misma secuencia de caracteres que la cadena dada
por el parmetro, f al se en caso contrario.

Lanza:
Nul l Poi nt er Except i on Si la cadena dada por el parmetro es nul l .
public boolean equals(Object object)

Regresa t r ue si y slo s el objeto dado por el parmetro no es nul l y es una cadena que
representa la misma secuencia de caracteres que esta cadena, f al se en caso contrario.

Parmetro:
obj ect El objeto con que se compara esta cadena.

Regresa:
t r ue si y slo s el objeto dado por el parmetro no es nul l y es una cadena que representa la
misma secuencia de caracteres que esta cadena, f al se en caso contrario.
public boolean equalsIgnoreCase(String str)

Regresa t r ue si y slo s esta cadena es igual a la cadena dada por el parmetro, sin tomar en
cuenta las maysculas, f al se en caso contrario.

Parmetro:
st r La cadena con que se compara esta cadena.

Regresa:
t r ue si y slo s esta cadena es igual a la cadena dada por el parmetro, sin tomar en cuenta las
maysculas, f al se en caso contrario.


134 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
Tabla 5.1 Algunos Mtodos de la Clase String. Continuacin.
public int indexOf(int ch)

Regresa el ndice de la primera ocurrencia dentro de esta cadena del carcter ch dado por el
parmetro. Si ch no est en esta cadena regresa -1.

Parmetro:
st r Carcter a buscar.

Regresa:
ndice de la primera ocurrencia dentro de esta cadena del carcter ch dado por el parmetro. Si ch
no est en esta cadena regresa -1.
public int indexOf(String str)

Regresa el ndice de la primera ocurrencia dentro de esta cadena de la subcadena dada por el
parmetro st r . Si st r no est en esta cadena regresa -1.

Parmetro:
st r Subcadena a buscar.

Regresa:
ndice de la primera ocurrencia dentro de esta cadena de la subcadena dada por el parmetro st r .
Si st r no est en esta cadena regresa -1.
Lanza:
Nul l Poi nt er Except i on Si la cadena dada por el parmetro es nul l .
public int length()

Regresa la longitud de esta cadena, esto es, el nmero de caracteres.

Regresa:
La longitud de esta cadena
public boolean startsWith(String prefix)

Regresa t r ue si y slo s esta cadena empieza con la misma secuencia de caracteres que la
cadena dada por el parmetro, f al se en caso contrario.

Parmetro:
pr ef i x Cadena prefija.

Regresa:
t r ue si y slo s esta cadena empieza con la misma secuencia de caracteres que la cadena dada
por el parmetro, f al se en caso contrario.

Lanza:
Nul l Poi nt er Except i on Si la cadena dada por el parmetro es nul l .








Tema 5 Arreglos y Cadenas en Java 135
ITSON Manuel Domitsu Kono
Tabla 5.1 Algunos Mtodos de la Clase String. Continuacin.
public String substring(int beginIndex)

Regresa una nueva cadena que es un subcadena de esta cadena. La subcadena empieza con el
carcter en el ndice dado por el parmetro y se extiende hasta el final de esta cadena.

Parmetro:
begi nI ndex ndice inicial de la subcadena inclusive.

Regresa:
La subcadena especi f i cada.

Lanza:
I ndexOut Of BoundsExcept i on Si begi nI ndex es negativo o mayor que la longitud de esta
cadena.
public String substring(int beginIndex, int endIndex)

Regresa una nueva cadena que es un subcadena de esta cadena. La subcadena empieza con el
carcter en el ndice dado por el parmetro begi nI ndex y se extiende hasta el carcter en el
ndice endI ndex - 1.

Parmetros:
begi nI ndex ndice inicial de la subcadena inclusive.
endI ndex ndice final de la subcadena exclusive.

Regresa:
La subcadena especi f i cada.

Lanza:
I ndexOut Of BoundsExcept i on Si begi nI ndex es negativo o endI ndex es mayor que la
longitud de esta cadena o begi nI ndex es mayor que endI ndex.
public char[] toCharArray()

Convierte esta cadena a un arreglo de caracteres.

Regresa:
Un arreglo cuya longitud es el tamao de esta cadena y cuyo contenido se inicializa a la secuencia
de caracteres de esta cadena.
public String toLowerCase()

Convierte los caracteres de esta cadena a minsculas.

Regresa:
Una nueva cadena con los caracteres de esta cadena convertidos a minsculas.
public String toUpperCase()

Convierte los caracteres de esta cadena a maysculas.

Regresa:
Una nueva cadena con los caracteres de esta cadena convertidos a maysculas.




136 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
Tabla 5.1 Algunos Mtodos de la Clase String. Continuacin.
public String trim()

Regresa una copia de esta cadena eliminando los caracteres blancos iniciales y finales. Un carcter
blanco es aquel cuyo cdigo Unicode (o ASCII) es menor o igual a 32,

Regresa:
Una copia de esta cadena eliminando los caracteres blancos iniciales y finales.
Clase StringBuffer

Los objetos de tipo St r i ngBuf f er son cadenas como las del tipo St r i ng pero su
contenido puede modificarse invocando una serie de mtodos.

Tabla 5.2 Algunos Mtodos de la Clase StringBuffer
public StringBuffer()

Construye una instancia de St r i ngBuf f er vaco y con una capacidad inicial de 16 caracteres.
public StringBuffer(int length)

Construye una instancia de St r i ngBuf f er vaco y con una capacidad inicial dada por el
parmetro.

Parmetro:
l engt h Capacidad inicial

Lanza:
Negat i veAr r aySi zeExcept i on Si el parmetro es negativo.
public StringBuffer(String str)

Construye una instancia de St r i ngBuf f er con la secuencia de caracteres contenida en el
parmetro.

Parmetro:
st r El contenido inicial de la instancia de St r i ngBuf f er .

Lanza:
Nul l Poi nt er Except i on Si st r es nulo.
public StringBuffer append(boolean b)
public StringBuffer append(char c)
public StringBuffer append(char [] str)
public StringBuffer append(double)
public StringBuffer append(float f)
public StringBuffer append(int i)
public StringBuffer append(long l)
public StringBuffer append(Object o)
public StringBuffer append(String str)
public StringBuffer append(StringBuffer sb)

Le agrega a esta cadena, una cadena con la representacin del parmetro.

Regresa:
Una referencia a esta cadena
Tema 5 Arreglos y Cadenas en Java 137
ITSON Manuel Domitsu Kono

Tabla 5.2 Algunos Mtodos de la Clase StringBuffer. Continuacin
public StringBuffer delete(int start, int end)

Elimina los caracteres de una subcadena de esta cadena. La subcadena empieza con el carcter
en el ndice dado por el parmetro st ar t y se extiende hasta el carcter en el ndice end - 1.

Parmetro:
st ar t ndice inicial de la subcadena inclusive.
end ndice final de la subcadena exclusive.

Regresa:
Una referencia a esta cadena.

Lanza:
St r i ngI ndexOut Of BoundsExcept i on Si st ar t es negativo, mayor que la longitud de esta
cadena o mayor que end.
public StringBuffer deleteCharAt(int index)

Elimina de esta cadena el carcter con ndice dado por el parmetro.

Parmetro:
i ndex ndice del carcter a eliminar.

Regresa:
Una referencia a esta cadena.

Lanza:
St r i ngI ndexOut Of BoundsExcept i on Si i ndex es negativo, mayor o igual que la longitud
de esta cadena.
public int indexOf(String str)

Regresa el ndice de la primera ocurrencia dentro de esta cadena de la subcadena dada por el
parmetro st r . Si st r no est en esta cadena regresa -1.

Parmetro:
st r Subcadena a buscar.

Regresa:
ndice de la primera ocurrencia dentro de esta cadena de la subcadena dada por el parmetro st r .
Si st r no est en esta cadena regresa -1.

Lanza:
Nul l Poi nt er Except i on Si la cadena dada por el parmetro es nul l .









138 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono

Tabla 5.2 Algunos Mtodos de la Clase StringBuffer. Continuacin
public StringBuffer insert(int offset, boolean b)
public StringBuffer insert(int offset, char c)
public StringBuffer insert(int offset, char[] str)
public StringBuffer insert(int offset, double d)
public StringBuffer insert(int offset, float f)
public StringBuffer insert(int offset, int i)
public StringBuffer insert(int offset, long l)
public StringBuffer insert(int offset, Object obj)
public StringBuffer insert(int offset, String str)

Inserta en esta cadena una subcadena con la representacin del segundo parmetro en la posicin
dada por el parmetro of f set .

Parmetro:
of f set Posicin donde se agregar la subcadena.

Regresa:
Una referencia a esta cadena.

Lanza:
St r i ngI ndexOut Of BoundsExcept i on Si st ar t es invlido.
public int length()

Regresa la longitud de esta cadena, esto es, el nmero de caracteres.

Regresa:
La longitud de esta cadena
public StringBuffer reverse()

Invierte los caracteres de la cadena. Se intercambian los caracteres con ndice 0 y l engt h( ) 1,
los caracteres con ndice 1 y l engt h( ) 2, etc.

Regresa:
Una referencia a esta cadena.
public void setCharAt(int index, char ch)

Reemplaza el carcter de esta cadena con ndice dado por el parmetro i ndex, por el carcter
dado por el parmetro ch.

Parmetro:
i ndex ndice del carcter a reemplazar.
ch Caracter nuevo

Lanza:
I ndexOut Of BoundsExcept i on Si i ndex es negativo o mayor o igual que la longitud de esta
cadena.






Tema 5 Arreglos y Cadenas en Java 139
ITSON Manuel Domitsu Kono

Tabla 5.2 Algunos Mtodos de la Clase StringBuffer. Continuacin
public String substring(int start)

Regresa una nueva cadena de tipo St r i ng con la secuencia de caracteres de esta cadena a partir
del carcter con ndice st ar t y hasta el final de esta cadena.

Parmetro:
start ndice del carcter a reemplazar.

Regresa:
Una nueva cadena de tipo St r i ng.

Lanza:
St r i ngI ndexOut Of BoundsExcept i on Si st ar t es negativo o mayor que la longitud de esta
cadena.
public String substring(int start, int end)

Regresa una nueva cadena de tipo St r i ng con la secuencia de caracteres de esta cadena a partir
del carcter con ndice st ar t y hasta el carcter con ndice end 1 de esta cadena.

Parmetro:
start ndice inicial, inclusive.
end ndice final, exclusive.

Regresa:
Una nueva cadena de tipo St r i ng.

Lanza:
St r i ngI ndexOut Of BoundsExcept i on Si st ar t o end son negativos, o mayores que la
longitud de esta cadena o st ar t es mayor que end.

Clase Vector

La clase Vect or implementa un arreglo de objetos. Los elementos pueden ser accedidos
usando un ndice entero. El tamao del vector puede crecer o disminuir en forma
dinmica al agregar o eliminar elementos una vez que el vector ha sido creado. La clase
Vect or se encuentra en el paquete j ava. ut i l .

La tabla 5.3 muestra los atributos de la clase Vect or :

Tabla 5.3 Atributos de la Clase Vector
Atributo Descripcin
protected int capacityIncrement Cantidad por la que la capacidad de un vector se incrementa
automticamente cuando su tamao es mayor que su
capacidad.
protected int elementCount Nmero de componentes en el Vector
protected object[] El arreglo en el que se almacenan las componentes del vector

140 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
La tabla 5.4 muestra algunos de los mtodos de la clase Vector:

Tabla 5.4 Algunos Mtodos de la Clase Vector
public Vector(int initialCapacity, int capacityIncrement)

Construye un vector vaco con la capacidad inicial e incremento de la capacidad dadas por sus
parmetros.

Parmetros:
i ni t i al Capaci t y - Capacidad inicial del vector
capaci t yI ncr ement Cantidad en la que se incrementa la capacidad del vector cuando se
desborda.

Lanza:
I l l egal Ar gument Except i on Si la capacidad inicial es negativa.
public Vector(int initialCapacity)

Construye un vector vaco con la capacidad inicial dada por su parmetro e incremento de la
capacidad de 0.

Parmetro:
i ni t i al Capaci t y - Capacidad inicial del vector

Lanza:
I l l egal Ar gument Except i on Si la capacidad inicial es negativa.
public Vector()

Construye un vector vaco con la capacidad inicial de 10 e incremento de la capacidad de 0.
public void add(int index, Object element)

Inserta el elemento dado por el parmetro el ement en el vector en la posicin dada por i ndex.
Recorriendo los elementos restantes una posicin a la derecha.

Parmetros:
i ndex Posicin donde se insertar el elemento.
el ement Elemento a insertar.

Lanza:
Ar r ayI ndexOut Of BoundsExcept i on Si el ndice est fuera de rango (index <0 || index >
size()).
public boolean add(Object o)

Agrega el elemento dado por el parmetro al final de la lista.

Parmetro:
o Elemento a agregarse al final de la lista.

Regresa:
t r ue si se agreg el elemento, f al se en caso contrario.




Tema 5 Arreglos y Cadenas en Java 141
ITSON Manuel Domitsu Kono
Tabla 5.4 Algunos Mtodos de la Clase Vector. Continuacin
public boolean contains(Object elem)

Prueba si el objeto dado por el parmetro es un componente del vector.

Parmetro:
el em Un objeto

Regresa:
t r ue si y slo s el objeto dado por el parmetro es el mismo que un elemento del vector,
comparado con el mtodo equals(); f al se en caso contrario.
public Object elementAt(int index)

Regresa el componente en la posicin dada por ndice.

Parmetro:
i ndex ndice del elemento a regresar.

Regresa:
El elemento en la posicin dada por el parmetro.

Lanza:
Ar r ayI ndexOut Of BoundsExcept i on Si el ndice est fuera de rango (index <0 || index >
size()).
public Object firstElement()

Regresa el primer elemento (posicin 0) del vector.

Regresa:
El primer elemento del vector.

Lanza:
NoSuchEl ement Except i on Si el vector est vaco.
public int indexOf(Object elem)

Busca la primera ocurrencia de elemento dado por el parmetro, comparado con el mtodo
equals(); f al se en caso contrario.

Parmetro:
el em Un objeto

Regresa:
El ndice de la primera ocurrencia de elemento dado por el parmetro
public boolean isEmpty()

Prueba si el vector est vaco.

Regresa:
t r ue si y slo s el vector no tiene componentes, f al se en caso contrario.





142 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
Tabla 5.4 Algunos Mtodos de la Clase Vector. Continuacin
public Object lastElement()

Regresa el ltimo elemento (posicin si ze( ) 1) del vector.

Regresa:
El ltimo elemento del vector.

Lanza:
NoSuchEl ement Except i on Si el vector est vaco.
public Object remove(int index)

Extrae el elemento en la posicin dada por el parmetro. Recorriendo los elementos restantes una
posicin a la izquierda.

Parmetro:
i ndex ndice del elemento a extraer.

Regresa:
El elemento extrado.

Lanza:
Ar r ayI ndexOut Of BoundsExcept i on Si el ndice est fuera de rango (index <0 || index >
size()).
public boolean remove(Object o)

Elimina la primera ocurrencia del elemento dado por el parmetro.

Parmetro:
o - Elemento a eliminar.

Regresa:
t r ue si el vector contena al elemento, f al se en caso contrario.
public void setElementAt(Object obj, int index)

Reemplaza el elemento en la posicin dada por el parmetro i ndex por el objeto dado por el
parmetro obj .

Parmetros:
obj Nuevo elemento.
index Posicin del elemento a reemplazar.

Lanza:
Ar r ayI ndexOut Of BoundsExcept i on Si el ndice est fuera de rango (index <0 || index >
size()).
public int size()

Regresa el nmero de componentes en este vector.

Regresa:
El nmero de componentes en este vector.



Tema 5 Arreglos y Cadenas en Java 143
ITSON Manuel Domitsu Kono
Tabla 5.4 Algunos Mtodos de la Clase Vector. Continuacin
public String toString()

Regresa una cadena con la representacin de este vector, conteniendo la representacin de cada
elemento.

Regresa:
Una cadena con la representacin de este vector
Ejemplos Sobre Vectores

En el siguiente fragmento de cdigo se muestra la implementacin en la clase Medi os de
los mtodos que permiten listar los medios del catlogo de medios, los medios que sean
del mismo tipo, los medios que sean de un gnero dado y los medios que sean de un
perodo dado:

Medios.java
/ *
* Medi os. j ava
*
* Cr eat ed on 15 de sept i embr e de 2007, 12: 21 PM
*/

package per si st enci a;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. Medi o;

/ **
* Est a cl ase per mi t e al macenar , act ual i zar , el i mi nar y consul t ar
* medi os ( canci ones y pel cul as) del pr ogr ama Amant eMusi ca.
* Los dat os se al macenan en ar r egl os.
*
* @aut hor mdomi t su
*/
publ i c cl ass Medi os {
pr ot ect ed Medi o medi os[ ] ;
pr ot ect ed i nt numMedi os = 0;

. . .

/ **
* Regr esa l a l i st a de t odos l os medi os.
* @r et ur n Li st a de t odos l os medi os
*/
publ i c Vect or l i st a( ) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Agr ega el medi o a l a l i st a
l i st a. add( medi os[ i ] ) ;
144 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
}

r et ur n l i st a;
}

/ **
* Regr esa l a l i st a de l os medi os del mi smo t t ul o que el par met r o
* @par amt i t ul o T t ul o de l os medi os a l i st ar
* @r et ur n Li st a de medi os del mi smo t t ul o que el par met r o
*/
publ i c Vect or l i st aTi t ul o( St r i ng t i t ul o) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si es el t t ul o especi f i cado
i f ( t i t ul o. equal s( medi os[ i ] . get Ti t ul o( ) ) )
/ / Agr ega el medi o a l a l i st a
l i st a. add( medi os[ i ] ) ;
}

r et ur n l i st a;
}

/ **
* Cr ea l a l i st a de l os medi os del mi smo gner o que el par met r o
* @par amcveGener o Cl ave del gner o de l os medi os a l i st ar
* @r et ur n Li st a de medi os del mi smo gner o que el par met r o
*/
publ i c Vect or l i st aGener o( St r i ng cveGener o) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si es el gner o especi f i cado
i f ( cveGener o. equal s( medi os[ i ] . get Gener o( ) . get CveGener o( ) ) )
/ / Agr ega el medi o a l a l i st a
l i st a. add( medi os[ i ] ) ;
}

r et ur n l i st a;
}

/ **
* Cr ea l a l i st a de l os medi os del mi smo per i odo que el par met r o
* @par amper i odo Per i odo de l os medi os a l i st ar
* @r et ur n Li st a de l os medi os del mi smo per i odo que el par met r o
*/
publ i c Vect or l i st aPer i odo( Per i odo per i odo) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si es el per i odo especi f i cado
i f ( per i odo. cont i ene( medi os[ i ] . get Fecha( ) ) )
/ / Agr ega el medi o a l a l i st a
l i st a. add( medi os[ i ] ) ;
Tema 5 Arreglos y Cadenas en Java 145
ITSON Manuel Domitsu Kono
}

r et ur n l i st a;
}
}

En el siguiente fragmento de cdigo se muestra la implementacin en la clase
Canci ones de los mtodos que permiten listar las canciones que sean de un intrprete
dado, las canciones que sean de un autor dado y listar las canciones que sean de un
lbum dado:

Canciones.java
/ *
* Canci ones. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/
package per si st enci a;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osNegoci o. Canci on;

/ **
* Est a cl ase per mi t e consul t ar canci ones del pr ogr ama Amant eMusi ca
* Los dat os se al macenan en ar r egl os.
*
* @aut hor mdomi t su
*/
publ i c cl ass Canci ones ext ends Medi os {
/ / Cr ea el ar r egl o par a al macenar l as canci ones
pr i vat e Canci on canci ones[ ] ;

. . .

/ **
* Regr esa l a l i st a de canci ones con el mi smo i nt er pr et e que el par met r o
* @par ami nt er pr et e I nt er pr et e de l as canci ones a l i st ar
* @r et ur n La l i st a de canci ones con el mi smo i nt er pr et e que el par met r o
*/
publ i c Vect or l i st aI nt er pr et e( St r i ng i nt er pr et e) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si es el i nt r pr et e especi f i cado
i f ( i nt er pr et e. equal s( canci ones[ i ] . get I nt er pr et e( ) ) )
/ / Agr ega l a canci n a l a l i st a
l i st a. add( canci ones[ i ] ) ;
}

r et ur n l i st a;
}

/ **
146 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
* Regr esa l a l i st a de canci ones con el mi smo aut or que el par met r o
* @par amaut or Aut or de l as canci ones a l i st ar
* @r et ur n La l i st a de canci ones con el mi smo aut or que el par met r o
*/
publ i c Vect or l i st aAut or ( St r i ng aut or ) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si es el aut or especi f i cado
i f ( aut or . equal s( canci ones[ i ] . get Aut or ( ) ) )
/ / Agr ega l a canci n a l a l i st a
l i st a. add( canci ones[ i ] ) ;
}
r et ur n l i st a;
}

/ **
* Regr esa l a l i st a de canci ones del mi smo l bumque el par met r o
* @par amal buml bumde l as canci ones a l i st ar
* @r et ur n La l i st a de canci ones del mi smo l bum
*/
publ i c Vect or l i st aAl bum( St r i ng al bum) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si es el l bumespeci f i cado
i f ( al bum. equal s( canci ones[ i ] . get Al bum( ) ) )
/ / Agr ega l a canci n a l a l i st a
l i st a. add( canci ones[ i ] ) ;
}

r et ur n l i st a;
}
}

En el siguiente fragmento de cdigo se muestra la implementacin en la clase
Pel i cul as de los mtodos que permiten listar las pelculas que sean de un actor dado y
listar las pelculas que sean de un director dado:

Peliculas.java
/ *
* Pel i cul as. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/
package per si st enci a;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osNegoci o. Pel i cul a;

/ **
* Est a cl ase per mi t e consul t ar pel cul as del pr ogr ama Amant eMusi ca
Tema 5 Arreglos y Cadenas en Java 147
ITSON Manuel Domitsu Kono
* Los dat os se al macenan en ar r egl os.
*
* @aut hor mdomi t su
*/
publ i c cl ass Pel i cul as ext ends Medi os {
/ / Ar r egl o par a al macenar l as pel cul as
pr i vat e Pel i cul a pel i cul as[ ] ;

. . .

/ **
* Regr esa l a l i st a de pel i cul as con el mi smo act or que el par met r o
* @par amact or Act or de l as pel cul as a l i st ar
* @r et ur n La l i st a de pel i cul as con el mi smo act or que el par met r o
*/
publ i c Vect or l i st aAct or ( St r i ng act or ) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si es el act or especi f i cado
i f ( pel i cul as[ i ] . get Act or 1( ) . equal s( act or ) | |
pel i cul as[ i ] . get Act or 2( ) . equal s( act or ) )
/ / Agr ega l a pel cul a a l a l i st a
l i st a. add( pel i cul as[ i ] ) ;
}

r et ur n l i st a;
}

/ **
* Regr esa l a l i st a de pel i cul as con el mi smo di r ect or que el par met r o
* @par amdi r et or Di r ect or de l as pel cul as a l i st ar
* @r et ur n La l i st a de pel i cul as con el mi smo di r ect or que el par met r o
*/
publ i c Vect or l i st aDi r ect or ( St r i ng di r ect or ) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numMedi os; i ++) {
/ / Si es el di r ect or especi f i cado
i f ( di r ect or . equal s( pel i cul as[ i ] . get Di r ect or ( ) ) )
/ / Agr ega l a pel cul a a l a l i st a
l i st a. add( pel i cul as[ i ] ) ;
}

r et ur n l i st a;
}
}

En el siguiente fragmento de cdigo se muestra la implementacin en la clase Gener os
del mtodo que permite listar los gneros:



148 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
Generos.java
/ *
* Gener os. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 11: 40 AM
*/

package per si st enci a;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osNegoci o. Gener o;

/ **
* Est a cl ase per mi t e al macenar , act ual i zar , el i mi nar y consul t ar
* gner os de canci ones y pel cul as del pr ogr ama Amant eMusi ca.
* Los dat os se al macenan en ar r egl os.
*
* @aut hor mdomi t su
*/
publ i c cl ass Gener os {
pr ot ect ed Gener o gener os[ ] ;
pr ot ect ed i nt numGener os = 0;

. . .

/ **
* Regr esa una l i st a de t odos l os gner os.
* @r et ur n Li st a de t odos l os gner os
*/
publ i c Vect or l i st a( ) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numGener os; i ++) {
/ / Agr ega el gner o a l a l i st a
l i st a. add( gener os[ i ] ) ;
}

r et ur n l i st a;
}

/ **
* Cr ea l a l i st a de l os gner os del mi smo t i po de medi o que el par met r o
* @par amt i poMedi o Ti po del medi o de l os gner os a l i st ar
* @r et ur n Li st a de l os gner os del mi smo t i po de medi o que el par met r o
*/
publ i c Vect or l i st aMedi o( char t i poMedi o) {
Vect or l i st a = new Vect or ( ) ;

/ / Recor r e el ar r egl o
f or ( i nt i = 0; i < numGener os; i ++) {
/ / Si es el medi o especi f i cado
i f ( t i poMedi o == gener os[ i ] . get Ti poMedi o( ) )
/ / Agr ega el medi o a l a l i st a
l i st a. add( gener os[ i ] ) ;
Tema 5 Arreglos y Cadenas en Java 149
ITSON Manuel Domitsu Kono
}

r et ur n l i st a;
}
}

Diseo en Capas y la Clase Fachada

En el Tema 4: Excepciones, se habl del diseo en capas. Las clases Medi os,
Canci ones y Pel i cul as que emplean arreglos para almacenar objetos de tipo
Canci on, Pel i cul a y Gener o en el programa sobre el Amante de la Msica y del
Cine conforman la capa inferior de la aplicacin y en este tipo de aplicaciones puede
suceder lo siguiente:

La capa superior de la aplicacin slo va a acceder a una parte de los mtodos
de una capa inferior y desearamos que el desarrollador de la capa superior slo
tuviera acceso a los mtodos que necesita, as no tendr que preocuparse por el
resto de mtodos que no requiere.
La capa superior de la aplicacin requiere de ciertas transacciones que
involucren varios mtodos de las clases de la capa inferior. Por ejemplo,
podramos tener una restriccin de que no se permiten claves repetidas en los
arreglos de canciones o pelculas. El mtodo para agregar un medio en la clase
medio no nos proporciona la verificacin.
Los datos que se desean almacenar pueden utilizar diferentes mecanismos, por
ejemplo arreglos, archivos y base de datos. Aunque en una aplicacin real
almacenar los datos en arreglos no es una solucin adecuada ya que los
arreglos se crean en la memoria RAM de la computadora y al salir de la
aplicacin o al apagarse la computadora se destruyen, perdindose su
informacin.

Como solucin a los problemas anteriores podramos construir una capa intermedia
que tuviera uno o ms mdulos, cada uno se encargar de lo siguiente:

Mostrar slo los mtodos de la capa inferior que la capa superior requiere.
Manejar las transacciones.
Ocultarle a la capa superior el mecanismo empleado para almacenar los datos,
proporcionndole a la capa superior el mismo mecanismo para acceder a los
datos independientemente de cmo se almacenan los datos. Esto permite
modificar o sustituir los mtodos de la capa inferior sin que le afecte a la capa
superior.
Traducir los mensajes de errores de la capa inferior a mensajes ms amigables
para la capa superior, conservando la informacin de los errores para fines de
depuracin.

150 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
A los mdulos que realizan las tareas anteriores se conocen como Fachadas. Cada
fachada estar formada por:

Una interfaz que establezca qu mtodos de la capa inferior mostrar la fachada
Una o ms clases que implementen la fachada anterior. Una para cada
mecanismo de almacenamiento.
Una Excepcin que envolver a las excepciones de la capa inferior.

El diagrama de clases de la figura 5.2 muestra la interfaz y la fachada que implementa
los mtodos declarados por la interfaz para programa sobre el amante de la msica y el
cine, cuando el almacenamiento de los datos es en arreglos:

Figura 5.2 Fachada del Programa AmanteMusica, Versin Arreglos

El siguiente cdigo muestra la clase FachadaExcept i on que ser la Excepcin que
envuelva las excepciones de la capa inferior del programa sobre el amante de la
msica:





Tema 5 Arreglos y Cadenas en Java 151
ITSON Manuel Domitsu Kono
FachadaException.java
/ *
* FachadaExcept i on. j ava
*
* Cr eada el 13 de sept i embr e de 2007, 12: 01 AM
*/

package excepci ones;

/ **
* Est a cl ase r epr esent a a l as excepci ones l anzadas por l as
* cl ases Fachada y envuel ve a l as excepci ones l anzadas por
* l as cl ases que encapsul an l a per si st enci a.
*
* @aut hor mdomi t su
*/
publ i c cl ass FachadaExcept i on ext ends Runt i meExcept i on {

/ **
* Const r uye una excepci n con un mensaj e de er r or nul o.
*/
publ i c FachadaExcept i on( ) {
}

/ **
* Const r uye una excepci n con el mensaj e de er r or del par met r o.
* @par ammsj Mensaj e de er r or .
*/
publ i c FachadaExcept i on( St r i ng msj ) {
super ( msj ) ;
}

/ **
* Const r uye una excepci n con el mensaj e de er r or del par met r o y l a causa
* or i gi nal del er r or .
* @par ammsj Mensaj e de er r or .
* @par amcausa Causa or i gi nal del er r or .
*/
publ i c FachadaExcept i on( St r i ng msj , Thr owabl e causa) {
super ( msj , causa) ;
}

/ **
* Const r uye una excepci n l a causa or i gi nal del er r or .
* @par amcausa Causa or i gi nal del er r or .
*/
publ i c FachadaExcept i on( Thr owabl e causa) {
super ( causa) ;
}
}

El siguiente cdigo muestra la interfaz de la fachada, I Fachada, de la capa inferior del
programa sobre el amante de la msica:


152 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
IFachada. java
/ *
* I Fachada. j ava
*
* Cr eada el 13 de sept i embr e de 2007, 12: 01 AM
*/
package i nt er f aces;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t excepci ones. FachadaExcept i on;

/ **
* Est a I nt er f az est abl ece l os mt odos que deben i mpl ement ar l as cl ases
* que encapsul en el mecani smo de per si st enci a del pr ogr ama Amant eMusi ca
*
* @aut hor mdomi t su
*/
publ i c i nt er f ace I Fachada {

/ **
* Obt i ene una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a obt ener
* @r et ur n La canci n si exi st e, nul l en caso cont r ar i o
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de canci ones.
*/
publ i c Canci on obt en( Canci on canci on) t hr ows FachadaExcept i on;

/ **
* Agr ega una canci n al cat l ogo de canci ones. No se per mi t en canci ones
* con cl aves r epet i das
* @par amcanci on Canci on a agr egar
* @t hr ows FachadaExcept i on Si no se puede agr egar l a canci n al
* cat l ogo de canci ones.
*/
publ i c voi d agr ega( Canci on canci on) t hr ows FachadaExcept i on;

/ **
* Act ual i za una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar l a canci n
* del cat l ogo de canci ones.
*/
publ i c voi d act ual i za( Canci on canci on) t hr ows FachadaExcept i on;

/ **
* El i mi na una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar l a canci n
* del cat l ogo de canci ones.
*/
publ i c voi d el i mi na( Canci on canci on) t hr ows FachadaExcept i on;

Tema 5 Arreglos y Cadenas en Java 153
ITSON Manuel Domitsu Kono
/ **
* Obt i ene una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a obt ener
* @r et ur n La pel cul a si exi st e, nul l en caso cont r ar i o
* @t hr ows FachadaExcept i on Si no se puede acceder al
* cat l ogo de pel cul as.
*/
publ i c Pel i cul a obt en( Pel i cul a pel i cul a) t hr ows FachadaExcept i on;

/ **
* Agr ega una pel cul a al cat l ogo de pel cul as. No se per mi t en pel cul as
* con cl aves r epet i das

* @par ampel i cul a Pel i cul a a agr egar
* @t hr ows FachadaExcept i on Si no se puede agr egar l a pel cul a al
* cat l ogo de pel cul as.
*/
publ i c voi d agr ega( Pel i cul a pel i cul a) t hr ows FachadaExcept i on;

/ **
* Act ual i za una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar l a pel cul a
* del cat l ogo de pel cul as.
*/
publ i c voi d act ual i za( Pel i cul a pel i cul a) t hr ows FachadaExcept i on;

/ **
* El i mi na una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar l a pel cul a
* del cat l ogo de pel cul as.
*/
publ i c voi d el i mi na( Pel i cul a pel i cul a) t hr ows FachadaExcept i on;

/ **
* Obt i ene un gner o del cat l ogo de gner os
* @par amgener o Gner o a obt ener
* @r et ur n El gner o si exi st e, nul l en caso cont r ar i o
* @t hr ows FachadaExcept i on Si no se puede acceder al
* cat l ogo de gner os.
*/
publ i c Gener o obt en( Gener o gener o) t hr ows FachadaExcept i on;

/ **
* Agr ega un gner o al cat l ogo de gner os. No se per mi t en gner os
* con cl aves r epet i das
* @par amgener o Gner o a agr egar
* @t hr ows FachadaExcept i on Si no se puede agr egar el gner o al
* cat l ogo de gner os.
*/
publ i c voi d agr ega( Gener o gener o) t hr ows FachadaExcept i on;

/ **
* Act ual i za un gner o del cat l ogo de gner os
* @par amgener o Gner o a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar el gner o del
154 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
* cat l ogo de gner os.
*/
publ i c voi d act ual i za( Gener o gener o) t hr ows FachadaExcept i on;

/ **
* El i mi na un gner o del cat l ogo de gner os
* @par amgener o Gner o a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar el gner o del
* cat l ogo de gner os.
*/
publ i c voi d el i mi na( Gener o gener o) t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a t odas l as canci ones
* @r et ur n Vect or con l a l i st a de t odas l as canci ones
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de canci ones.
*/
publ i c Vect or consul t aCanci ones( ) t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo t t ul o.
* @par amt i t ul o Ti t ul o de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones con el mi smo
* t t ul o.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de canci ones.
*/
publ i c Vect or consul t aCanci onesTi t ul o( St r i ng t i t ul o)
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo i nt r pr et e.
* @par ami nt er pr et e I nt r pr et e de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones con el mi smo
* i nt r pr et e.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de canci ones.
*/
publ i c Vect or consul t aCanci onesI nt er pr et e( St r i ng i nt er pr et e)
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo aut or .
* @par amaut or Aut or de l as canci ones de l a l i st a.
* @r et ur n Vect or con l a l i st a de t odas l as canci ones con el mi smo aut or .
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de canci ones.
*/
publ i c Vect or consul t aCanci onesAut or ( St r i ng aut or )
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo gner o.
* @par amcveGener o Cl ave del gner o de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones con el mi smo
* gner o.
Tema 5 Arreglos y Cadenas en Java 155
ITSON Manuel Domitsu Kono
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de canci ones.
*/
publ i c Vect or consul t aCanci onesGener o( St r i ng cveGener o)
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones del mi smo l bum.
* @par amal buml bumde l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones del mi smo l bum.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de canci ones.
*/
publ i c Vect or consul t aCanci onesAl bum( St r i ng al bum) t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones del mi smo per i odo.
* @par amper i odo Per odo de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones del mi smo per odo.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de canci ones.
*/
publ i c Vect or consul t aCanci onesPer i odo( Per i odo per i odo)
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as
* @r et ur n Vect or con l a l i st a de t odas l as pel cul as.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de pel cul as.
*/
publ i c Vect or consul t aPel i cul as( ) t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo t t ul o
* @par amt i t ul o T t ul o de l as pel cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel i cul as del mi smo t t ul o.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de pel cul as.
*/
publ i c Vect or consul t aPel i cul asTi t ul o( St r i ng t i t ul o)
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo act or
* @par amact or Act or de l as pel i cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel i cul as del mi smo act or .
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de pel cul as.
*/
publ i c Vect or consul t aPel i cul asAct or ( St r i ng act or ) t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo di r ect or
* @par amdi r ect or Di r ect or de l as pel i cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel i cul as del mi smo di r ect or .
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
156 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
* de pel cul as.
*/
publ i c Vect or consul t aPel i cul asDi r ect or ( St r i ng di r ect or )
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo gner o
* @par amcveGener o Cl ave del gner o de l as pel cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel cul as del mi smo gner o.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de pel cul as.
*/
publ i c Vect or consul t aPel i cul asGener o( St r i ng cveGener o)
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo per i odo
* @par amper i odo Per i odo de l as pel i cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel i cul as del mi smo per i odo.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de pel cul as.
*/
publ i c Vect or consul t aPel i cul asPer i odo( Per i odo per i odo)
t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de t odos l os gner os
* @r et ur n Vect or con l a l i st a de t odos l os gner os.
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de gner os.
*/
publ i c Vect or consul t aGener os( ) t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de l os gner os de canci ones
* @r et ur n Vect or con l a l i st a de l os gner os canci ones
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de gner os.
*/
publ i c Vect or consul t aGener osCanci ones( ) t hr ows FachadaExcept i on;

/ **
* Obt i ene una l i st a de l os gner os de pel cul as
* @r et ur n Vect or con l a l i st a de l os gner os pel cul as
* @t hr ows FachadaExcept i on Si no se puede acceder al cat l ogo
* de gner os.
*/
publ i c Vect or consul t aGener osPel i cul as( ) t hr ows FachadaExcept i on;
}

El siguiente cdigo muestra la clase Fachada del programa sobre el amante de la
msica, cuando el almacenamiento de los datos es en arreglos. Esta clase implementa
la interfaz I Fachada. Hay que notar que aunque en la interfaz I Fachada se
declararon que todos los mtodos lanzan una excepcin del tipo FachadaExcept i on,
Tema 5 Arreglos y Cadenas en Java 157
ITSON Manuel Domitsu Kono
en las implementaciones de los mtodos no se requiere que los mtodos declaren ni
lancen la excepcin.

FachadaArreglos.java
/ *
* FachadaAr r egl os. j ava
*
* Cr eat ed on 15 de sept i embr e de 2007, 12: 21 PM
*/

package f achadas;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t excepci ones. *;
i mpor t i nt er f aces. I Fachada;
i mpor t per si st enci a. *;

/ **
* Est a cl ase i mpl ement a l a i nt er f az I Fachada del mecani smo de per si st enci a
* de ar r egl os del pr ogr ama Amant eMusi ca
*
* @aut hor mdomi t su
*/
publ i c cl ass FachadaAr r egl os i mpl ement s I Fachada {
pr i vat e Gener os cat al ogoGener os;
pr i vat e Canci ones cat al ogoCanci ones;
pr i vat e Pel i cul as cat al ogoPel i cul as;

/ **
* Est e const r uct or cr ea l os obj et os con l os ar r egl os par a
* al macenar l os gner os, canci ones y pel cul as
*/
publ i c FachadaAr r egl os( ) {
/ / Cr ea un obj et o del t i po Gener os par a accesar a l a t abl a canci ones
cat al ogoGener os = new Gener os( 50) ;

/ / Cr ea un obj et o del t i po Canci ones par a accesar a l a t abl a canci ones
cat al ogoCanci ones = new Canci ones( 1000) ;

/ / Cr ea un obj et o del t i po Pel i cul as par a accesar a l a t abl a pel i cul as
cat al ogoPel i cul as = new Pel i cul as( 100) ;
}

/ **
* Obt i ene una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a obt ener
* @r et ur n La canci n si exi st e, nul l en caso cont r ar i o
*/
publ i c Canci on obt en( Canci on canci on) {
/ / Obt en l a canci n
r et ur n cat al ogoCanci ones. obt en( canci on) ;
}

158 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
/ **
* Agr ega una canci n al cat l ogo de canci ones. No se per mi t en canci ones
* con cl aves r epet i das
* @par amcanci on Canci on a agr egar
* @t hr ows FachadaExcept i on Si no se puede agr egar l a canci n al
* cat l ogo de canci ones.
*/
publ i c voi d agr ega( Canci on canci on) t hr ows FachadaExcept i on {
Canci on canci onBuscada;

/ / Busca l a canci n en el ar r egl o con l a mi sma cl ave.
canci onBuscada = cat al ogoCanci ones. obt en( canci on) ;

/ / Si l a hay, no se agr ega al ar r egl o
i f ( canci onBuscada ! = nul l )
t hr ow new FachadaExcept i on( " Canci n r epet i da" ) ;

/ / Agr ega l a nueva canci n al cat l ogo
t r y {
cat al ogoCanci ones. agr ega( canci on) ;
}
cat ch( Per si st enci aExcept i on pe) {
/ / Aqu se envuel ve l a excepci n Per si st enci aExcept i on
/ / en l a excepci n FachadaExcept i on y se r el anza
t hr ow new FachadaExcept i on( " No se puede agr egar l a canci n" , pe) ;
}
}

/ **
* Act ual i za una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar l a canci n del
* cat l ogo de canci ones.
*/
publ i c voi d act ual i za( Canci on canci on) t hr ows FachadaExcept i on {
t r y {
/ / Act ual i za l a canci n del cat l ogo
cat al ogoCanci ones. act ual i za( canci on) ;
}
cat ch( Per si st enci aExcept i on pe) {
/ / Aqu se envuel ve l a excepci n Per si st enci aExcept i on
/ / en l a excepci n FachadaExcept i on y se r el anza
t hr ow new FachadaExcept i on( " No se puede act ual i zar l a canci n" , pe) ;
}
}

/ **
* El i mi na una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar l a canci n
* del cat l ogo de canci ones.
*/
publ i c voi d el i mi na( Canci on canci on) t hr ows FachadaExcept i on {
/ / El i mi na l a canci n del cat l ogo
t r y {
cat al ogoCanci ones. el i mi na( canci on) ;
}
Tema 5 Arreglos y Cadenas en Java 159
ITSON Manuel Domitsu Kono
cat ch( Per si st enci aExcept i on pe) {
/ / Aqu se envuel ve l a excepci n Per si st enci aExcept i on
/ / en l a excepci n FachadaExcept i on y se r el anza
t hr ow new FachadaExcept i on( " No se puede el i mi nar l a canci n" , pe) ;
}
}

/ **
* Obt i ene una pel cul a del cat l ogo de pel cul as
* @par ampel i cul a Pel i cul a a obt ener
* @r et ur n La pel cul a si exi st e, nul l en caso cont r ar i o
*/
publ i c Pel i cul a obt en( Pel i cul a pel i cul a) {
/ / Obt en l a pel cul a
r et ur n cat al ogoPel i cul as. obt en( pel i cul a) ;
}

/ **
* Agr ega una pel cul a al cat l ogo de pel cul as. No se per mi t en pel cul as
* con cl aves r epet i das
* @par ampel i cul a Pel i cul a a agr egar
* @t hr ows FachadaExcept i on Si no se puede agr egar l a pel cul a al
* cat l ogo de pel cul as.
*/
publ i c voi d agr ega( Pel i cul a pel i cul a) t hr ows FachadaExcept i on {
Pel i cul a pel i cul aBuscada;

/ / Busca l a pel cul a en el ar r egl o con l a mi sma cl ave.
pel i cul aBuscada = cat al ogoPel i cul as. obt en( pel i cul a) ;

/ / Si l a hay, no se agr ega al ar r egl o
i f ( pel i cul aBuscada ! = nul l )
t hr ow new FachadaExcept i on( " Pel cul a r epet i da" ) ;

/ / Agr ega l a nueva pel cul a al cat l ogo
t r y {
cat al ogoPel i cul as. agr ega( pel i cul a) ;
}
cat ch( Per si st enci aExcept i on pe) {
/ / Aqu se envuel ve l a excepci n Per si st enci aExcept i on
/ / en l a excepci n FachadaExcept i on y se r el anza
t hr ow new FachadaExcept i on( " No se puede agr egar l a pel cul a" , pe) ;
}
}

/ **
* Act ual i za una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar l a pel cul a
* del cat l ogo de pel cul as.
*/
publ i c voi d act ual i za( Pel i cul a pel i cul a) t hr ows FachadaExcept i on {
/ / Act ual i za l a pel cul a del cat l ogo
t r y {
cat al ogoPel i cul as. act ual i za( pel i cul a) ;
}
cat ch( Per si st enci aExcept i on pe) {
160 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
/ / Aqu se envuel ve l a excepci n Per si st enci aExcept i on
/ / en l a excepci n FachadaExcept i on y se r el anza
t hr ow new FachadaExcept i on( " No se puede act ual i zar l a pel cul a" , pe) ;
}
}

/ **
* El i mi na una pel cul a del cat l ogo de pel cul as
* @par ampel i cul a Pel cul a a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar l a pel cul a
* del cat l ogo de pel cul as.
*/
publ i c voi d el i mi na( Pel i cul a pel i cul a) t hr ows FachadaExcept i on {
/ / El i mi na l a pel cul a del cat l ogo
t r y {
cat al ogoPel i cul as. el i mi na( pel i cul a) ;
}
cat ch( Per si st enci aExcept i on pe) {
/ / Aqu se envuel ve l a excepci n Per si st enci aExcept i on
/ / en l a excepci n FachadaExcept i on y se r el anza
t hr ow new FachadaExcept i on( " No se puede el i mi nar l a pel cul a" , pe) ;
}
}

/ **
* Obt i ene un gner o del cat l ogo de gner os
* @par amgener o Gner o a obt ener
* @r et ur n El gner o si exi st e, nul l en caso cont r ar i o
* @t hr ows FachadaExcept i on Si no se puede acceder al
* cat l ogo de gner os.
*/
publ i c Gener o obt en( Gener o gener o) t hr ows FachadaExcept i on {
/ / Obt en el gner o
r et ur n cat al ogoGener os. obt en( gener o) ;
}

/ **
* Agr ega un gner o al cat l ogo de gner os. No se per mi t en gner os
* con cl aves r epet i das
* @par amgener o Gner o a agr egar
* @t hr ows FachadaExcept i on Si no se puede agr egar el gner o al
* cat l ogo de gner os.
*/
publ i c voi d agr ega( Gener o gener o) t hr ows FachadaExcept i on {
Gener o gener oBuscado;

/ / Busca el gner o en el ar r egl o con l a mi sma cl ave.
gener oBuscado = cat al ogoGener os. obt en( gener o) ;

/ / Si l o hay, no se agr ega al ar r egl o
i f ( gener oBuscado ! = nul l ) t hr ow new FachadaExcept i on( " Gner o r epet i do" ) ;

/ / Agr ega el nuevo gner o al cat l ogo
t r y {
cat al ogoGener os. agr ega( gener o) ;
}
cat ch( Per si st enci aExcept i on pae) {
Tema 5 Arreglos y Cadenas en Java 161
ITSON Manuel Domitsu Kono
t hr ow new FachadaExcept i on( " No se puede agr egar el gner o" , pae) ;
}
}

/ **
* Act ual i za un gner o del cat l ogo de gner os
* @par amgener o Gner o a act ual i zar
* @t hr ows FachadaExcept i on Si no se puede act ual i zar el gner o del
* cat l ogo de gner os.
*/
publ i c voi d act ual i za( Gener o gener o) t hr ows FachadaExcept i on {
/ / Act ual i za el gner o del cat l ogo
t r y {
cat al ogoGener os. act ual i za( gener o) ;
}
cat ch( Per si st enci aExcept i on pae) {
t hr ow new FachadaExcept i on( " No se puede act ual i zar el gner o" , pae) ;
}
}

/ **
* El i mi na un gner o del cat l ogo de gner os
* @par amgener o Gner o a el i mi nar
* @t hr ows FachadaExcept i on Si no se puede el i mi nar el gner o del
* cat l ogo de gner os.
*/
publ i c voi d el i mi na( Gener o gener o) t hr ows FachadaExcept i on {
/ / El i mi na el gner o del cat l ogo
t r y {
cat al ogoGener os. el i mi na( gener o) ;
}
cat ch( Per si st enci aExcept i on pae) {
t hr ow new FachadaExcept i on( " No se puede el i mi nar el gner o" , pae) ;
}
}

/ **
* Obt i ene una l i st a t odas l as canci ones
* @r et ur n Vect or con l a l i st a de t odas l as canci ones
*/
publ i c Vect or consul t aCanci ones( ) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st a( ) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo t t ul o.
* @par amt i t ul o Ti t ul o de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones con el mi smo
* t t ul o.
*/
publ i c Vect or consul t aCanci onesTi t ul o( St r i ng t i t ul o) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aTi t ul o( t i t ul o) ;
}

/ **
162 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
* Obt i ene una l i st a de t odas l as canci ones con el mi smo i nt r pr et e.
* @par ami nt er pr et e I nt r pr et e de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones con el mi smo
* i nt r pr et e.
*/
publ i c Vect or consul t aCanci onesI nt er pr et e( St r i ng i nt er pr et e) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aI nt er pr et e( i nt er pr et e) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo aut or .
* @par amaut or Aut or de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones con el mi smo aut or .
*/
publ i c Vect or consul t aCanci onesAut or ( St r i ng aut or ) {
/ / Obt i ene el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aAut or ( aut or ) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo gner o.
* @par amcveGener o Cl ave del gner o de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones con el mi smo
* gner o.
*/
publ i c Vect or consul t aCanci onesGener o( St r i ng cveGener o) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aGener o( cveGener o) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones del mi smo l bum.
* @par amal buml bumde l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones del mi smo l bum.
*/
publ i c Vect or consul t aCanci onesAl bum( St r i ng al bum) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aAl bum( al bum) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones del mi smo per i odo.
* @par amper i odo Per odo de l as canci ones de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as canci ones del mi smo per odo.
*/
publ i c Vect or consul t aCanci onesPer i odo( Per i odo per i odo) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aPer i odo( per i odo) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as
* @r et ur n Vect or con l a l i st a de t odas l as pel cul as.
*/
publ i c Vect or consul t aPel i cul as( ) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
Tema 5 Arreglos y Cadenas en Java 163
ITSON Manuel Domitsu Kono
r et ur n cat al ogoPel i cul as. l i st a( ) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo t t ul o
* @par amt i t ul o T t ul o de l as pel cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel i cul as del mi smo t t ul o.
*/
publ i c Vect or consul t aPel i cul asTi t ul o( St r i ng t i t ul o) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aTi t ul o( t i t ul o) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo act or
* @par amact or Act or de l as pel i cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel i cul as del mi smo act or .
*/
publ i c Vect or consul t aPel i cul asAct or ( St r i ng act or ) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aAct or ( act or ) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo di r ect or
* @par amdi r ect or Di r ect or de l as pel i cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel i cul as del mi smo di r ect or .
*/
publ i c Vect or consul t aPel i cul asDi r ect or ( St r i ng di r ect or ) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aDi r ect or ( di r ect or ) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo gner o
* @par amcveGener o Cl ave del gner o de l as pel cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel cul as del mi smo gner o.
*/
publ i c Vect or consul t aPel i cul asGener o( St r i ng cveGener o) {
/ / Regr esa el vect or con l a l i st a de pel cul as
r et ur n cat al ogoPel i cul as. l i st aGener o( cveGener o) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo per i odo
* @par amper i odo Per i odo de l as pel i cul as de l a l i st a
* @r et ur n Vect or con l a l i st a de t odas l as pel i cul as del mi smo per i odo.
*/
publ i c Vect or consul t aPel i cul asPer i odo( Per i odo per i odo) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aPer i odo( per i odo) ;
}

/ **
* Obt i ene una l i st a de t odos l os gner os
* @r et ur n Vect or con l a l i st a de t odos l os gner os.
*/
164 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
publ i c Vect or consul t aGener os( ) {
/ / Regr esa el vect or con l a l i st a de gner os
r et ur n cat al ogoGener os. l i st a( ) ;
}

/ **
* Obt i ene una l i st a de l os gner os de canci ones
* @r et ur n Vect or con l a l i st a de l os gner os canci ones
*/
publ i c Vect or consul t aGener osCanci ones( ) {
/ / Regr esa el vect or con l a l i st a de gner os de canci ones
r et ur n cat al ogoGener os. l i st aMedi o( ' C' ) ;
}

/ **
* Obt i ene una l i st a de l os gner os de pel cul as
* @r et ur n Vect or con l a l i st a de l os gner os pel cul as
*/
publ i c Vect or consul t aGener osPel i cul as( ) {
/ / Regr esa el vect or con l a l i st a de gner os de pel cul as
r et ur n cat al ogoGener os. l i st aMedi o( ' P' ) ;
}
}

La siguiente clase es utilizada para probar la clase FachadaAr r egl os del programa
sobre el amante de la msica y el cine. En el mtodo mai n( ) de esta clase se crean una
instancia de la clase FachadaAr r egl os y se le asigna una referencia del tipo de la
interfaz IFachada, esto es vlido ya que se considera que cualquier clase que
implementa una interfaz es del tipo de la interfaz. La clase FachadaAr r egl os oculta el
mecanismo de almacenamiento que son arreglos y slo deja ver las operaciones para
agregar, actualizar, eliminar canciones y pelculas. Se listan los catlogos o se hacen
listas parciales

Prueba3.java
/ *
* Pr ueba3. j ava
*
* Cr eada el 15 de sept i embr e de 2007, 12: 21 PM
*/

package pr uebas;

i mpor t j ava. ut i l . Vect or ;

i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t excepci ones. FachadaExcept i on;
i mpor t i nt er f aces. I Fachada;
i mpor t f achadas. FachadaAr r egl os;

/ **
* Est a cl ase se ut i l i za par a pr obar l a cl ase FachadaAr r egl os
*
* @aut hor mdomi t su
Tema 5 Arreglos y Cadenas en Java 165
ITSON Manuel Domitsu Kono
*/
publ i c cl ass Pr ueba3 {

/ **
* Mt odo mai n( ) en el que se i nvocan a l os mt odos de l a cl ase
* FachadaAr r egl os par a pr obar l os
* @par amar gs t he command l i ne ar gument s
*/
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) {
Pr ueba3 pr ueba3 = new Pr ueba3( ) ;

/ / Cr ean l a f achada de l os obj et os que per mi t en al macenar l as
/ / canci ones y pel i cul as en ar r egl os
I Fachada f achada = new FachadaAr r egl os( ) ;
Vect or l i st a = nul l ;
Gener o gener o;
Canci on canci on = nul l ;

/ / Se cr ean t r es gner os de canci ones
Gener o gener o1 = new Gener o( " GC001" , " Bal ada" , ' C' ) ;
Gener o gener o2 = new Gener o( " GC002" , " Bossanova" , ' C' ) ;
Gener o gener o3 = new Gener o( " GC003" , " Rock" , ' C' ) ;

/ / Se agr ega el gner o 1 al cat l ogo de gner os
t r y {
f achada. agr ega( gener o1) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 1 al cat l ogo de gner os" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se agr ega el gner o 2 al cat l ogo de gner os
t r y {
f achada. agr ega( gener o2) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 2 al cat l ogo de gner os" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 2" ) ;
}

/ / Se agr ega el gner o 3 al cat l ogo de gner os
t r y {
f achada. agr ega( gener o3) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 3 al cat l ogo de gner os" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 3" ) ;
}

/ / Se agr ega de nuevo el gner o 1 al cat l ogo de gner os
t r y {
f achada. agr ega( gener o1) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 1 al cat l ogo de gner os" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
166 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
}

/ / Se cr ean t r es gner os de pel cul as
Gener o gener o4 = new Gener o( " GP001" , " Dr ama" , ' P' ) ;
Gener o gener o5 = new Gener o( " GP002" , " Ci enci a Fi cci n" , ' P' ) ;
Gener o gener o6 = new Gener o( " GP003" , " Comedi a" , ' P' ) ;

/ / Se agr ega el gner o 4 al cat l ogo de gner os
t r y {
f achada. agr ega( gener o4) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 4 al cat l ogo de gner os" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 4" ) ;
}

/ / Se agr ega el gner o 5 al cat l ogo de gner os
t r y {
f achada. agr ega( gener o5) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 5 al cat l ogo de gner os" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 5" ) ;
}

/ / Se agr ega el gner o 6 al cat l ogo de gner os
t r y {
f achada. agr ega( gener o6) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 6 al cat l ogo de gner os" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 6" ) ;
}

/ / Despl i ega el cont eni do del cat al ogo de gner os
Syst em. out . pr i nt l n( " Li st a de gner os" ) ;
t r y {
Syst em. out . pr i nt l n( f achada. consul t aGener os( ) ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se modi f i ca el gener o de cl ave " GC002" , a " Samba"
t r y {
gener o = f achada. obt en( new Gener o( " GC002" ) ) ;
gener o. set Nombr e( " Samba" ) ;
f achada. act ual i za( gener o) ;
Syst em. out . pr i nt l n( " Se act ual i zo el gener o de cl ave GC002" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " GC002" ) ;
}

/ / Se el i mi na el gner o " GP003" del cat al ogo de gener os
t r y {
f achada. el i mi na( new Gener o( " GP003" ) ) ;
Tema 5 Arreglos y Cadenas en Java 167
ITSON Manuel Domitsu Kono
Syst em. out . pr i nt l n( " Se el i mi no el gener o de cl ave GP003" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " GP003" ) ;
}

/ / Se el i mi na el gner o " GP004" ( i nexi st ent e) del cat al ogo de gener os
t r y {
f achada. el i mi na( new Gener o( " GP004" ) ) ;
Syst em. out . pr i nt l n( " Se el i mi no el gener o de cl ave GP004" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " GC004" ) ;
}

/ / Despl i ega el cont eni do del cat al ogo de gner os
Syst em. out . pr i nt l n( " Li st a de gner os" ) ;
t r y {
Syst em. out . pr i nt l n( f achada. consul t aGener os( ) ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Despl i ega el cont eni do del cat al ogo de gner os de canci ones
Syst em. out . pr i nt l n( " Li st a de gner os de canci ones" ) ;
t r y {
Syst em. out . pr i nt l n( f achada. consul t aGener osCanci ones( ) ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Despl i ega el cont eni do del cat al ogo de gner o de pel cul as
Syst em. out . pr i nt l n( " Li st a de gner os de pel cul as" ) ;
t r y {
Syst em. out . pr i nt l n( f achada. consul t aGener osPel i cul as( ) ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se cr ean t r es canci ones
Canci on canci on1 = new Canci on( " C0001" , " The l ong and wi ndi ng r oad" ,
gener o1, " The Beat l es" , " J ohn Lennon" ,
" Let i t be" , 3, new Fecha( 24, 3, 1970) ) ;
Canci on canci on2 = new Canci on( " C0002" , " Gar ot a de I panema" , gener o2,
" Los I ndi os Tabaj ar as" ,
" Ant oni o Car l os J obi m" ,
" Bossanova J azz Vol . 1" , 3,
new Fecha( 1, 12, 1970) ) ;
Canci on canci on3 = new Canci on( " C0003" , " Desaf i nado" , gener o2,
" J oao Gi l ber t o" , " J oao Gi l ber t o" ,
" Bossanova J azz Vol . 1" , 3,
new Fecha( 3, 12, 1980) ) ;

/ / Se agr ega l a canci n 1 al cat l ogo de canci ones
168 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
t r y {
f achada. agr ega( canci on1) ;
Syst em. out . pr i nt l n( " Se agr ego l a canci on 1" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se i nt ent a agr egar de nuevo l a canci n 1 al cat l ogo de canci ones
t r y {
f achada. agr ega( canci on1) ;
Syst em. out . pr i nt l n( " Se agr ego l a canci on 1" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se agr ega l a canci n 2 al cat l ogo de canci ones
t r y {
f achada. agr ega( canci on2) ;
Syst em. out . pr i nt l n( " Se agr ega l a canci on 2" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 2" ) ;
}

/ / Se agr ega l a canci n 3 al cat l ogo de canci ones
t r y {
f achada. agr ega( canci on3) ;
Syst em. out . pr i nt l n( " Se agr ega l a canci on 3" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 3" ) ;
}

/ / Se l i st a el cat l ogo de canci ones
Syst em. out . pr i nt l n( " Li st a de canci ones: " ) ;
t r y {
l i st a = f achada. consul t aCanci ones( ) ;
Syst em. out . pr i nt l n( l i st a) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se act ual i za l a canci n de cl ave " C0001" al gener o " GC003"
t r y {
/ / Obt i ene el gner o 3 del ct al ogo de gner os de canci ones
gener o = f achada. obt en( new Gener o( " GC003" ) ) ;
i f ( gener o ! = nul l ) {
/ / Obt i ene l a canci n 1 del ct al ogo de canci ones
canci on = f achada. obt en( new Canci on( " C0001" ) ) ;
i f ( canci on ! = nul l ) {
/ / Se act ual i za l a canci n 1
canci on. set Gener o( gener o) ;
f achada. act ual i za( canci on) ;
Syst em. out . pr i nt l n( " Se act ual i zo l a canci n de cl ave C0001 al
Tema 5 Arreglos y Cadenas en Java 169
ITSON Manuel Domitsu Kono
gener o GC003" ) ;
} el se Syst em. out . pr i nt l n( " No exi st e l a canci n C0001" ) ;
} el se Syst em. out . pr i nt l n( " No exi st e el gner o GC003" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se el i mi na l a canci n de cl ave " C0003"
t r y {
f achada. el i mi na( new Canci on( " C0003" ) ) ;
Syst em. out . pr i nt l n( " Se el i mi na l a canci on de cl ave C0003" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " C0003" ) ;
}

/ / Se l i st a el cat l ogo de canci ones
Syst em. out . pr i nt l n( " Li st a de canci ones: " ) ;
t r y {
l i st a = f achada. consul t aCanci ones( ) ;
Syst em. out . pr i nt l n( l i st a) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se l i st a l as canci ones con el i nt er pr et e " The Beat l es"
Syst em. out . pr i nt l n( " Li st a de canci ones de The Beat l es: " ) ;
t r y {
l i st a = f achada. consul t aCanci onesI nt er pr et e( " The Beat l es" ) ;
Syst em. out . pr i nt l n( l i st a) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se l i st a l as canci ones de samba, " GC002"
Syst em. out . pr i nt l n( " Li st a de canci ones de Samba: " ) ;
t r y {
l i st a = f achada. consul t aCanci onesGener o( " GC002" ) ;
Syst em. out . pr i nt l n( l i st a) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se cr ean dos pel i cul as
Pel i cul a pel i cul a1 = new Pel i cul a( " P000001" , " Casa Bl anca" , gener o4,
" Humphr ey Bogar t " , " I ngr i d Ber gman" ,
" Mi chael Cur t i z" , 102,
new Fecha( 1, 1, 1942) ) ;
Pel i cul a pel i cul a2 = new Pel i cul a( " P000002" , " 2001 Space Odyssey" ,
gener o5, " Kei r Dul l ea" ,
" Gar y Lockwood" , " St anl ey Kubr i ck" ,
141, new Fecha( 1, 1, 1968) ) ;

170 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
/ / Se agr ega l a pel cul a 1 al cat l ogo de pel cul as
t r y {
f achada. agr ega( pel i cul a1) ;
Syst em. out . pr i nt l n( " Se agr ego l a pel cul a 1" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se agr ega l a pel cul a 2 al cat l ogo de pel cul as
t r y {
f achada. agr ega( pel i cul a2) ;
Syst em. out . pr i nt l n( " Se agr ego l a pel cul a 2" ) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 2" ) ;
}

/ / Se l i st a el cat l ogo de pel cul as
Syst em. out . pr i nt l n( " Li st a de pel i cul as: " ) ;
t r y {
l i st a = f achada. consul t aPel i cul as( ) ;
Syst em. out . pr i nt l n( l i st a) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se l i st a l as pel cul as de I ngr i d Ber gman
Syst em. out . pr i nt l n( " Li st a de pel i cul as de I ngr i d Ber gman: " ) ;
t r y {
l i st a = f achada. consul t aPel i cul asAct or ( " I ngr i d Ber gman" ) ;
Syst em. out . pr i nt l n( l i st a) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Li st a de pel i cul as en el per i odo: 1/ 03/ 1970 a 1/ 05/ 1970
Per i odo per i odo = new Per i odo( new Fecha( 1, 1, 1960) ,
new Fecha( 1, 1, 1970) ) ;
Syst em. out . pr i nt l n( " Li st a de pel i cul as en el per i odo: " + per i odo) ;
t r y {
l i st a = f achada. consul t aPel i cul asPer i odo( per i odo) ;
Syst em. out . pr i nt l n( l i st a) ;
} cat ch( FachadaExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}
}
}

El listado siguiente muestra un fragmento de la corrida del programa anterior al
generarse un error al querer eliminar un gnero inexistente:


Tema 5 Arreglos y Cadenas en Java 171
ITSON Manuel Domitsu Kono
. . .
Li st a de gner os
[ GC001, Bal ada, C, GC002, Bossanova, C, GC003, Rock, C, GP001, Dr ama, P,
GP002, Ci enci a Fi cci n, P, GP003, Comedi a, P]
Se act ual i zo el gener o de cl ave GC002
Se el i mi no el gener o de cl ave GP003
Er r or : No se puede el i mi nar el gner o GC004
Li st a de gner os
[ GC001, Bal ada, C, GC002, Samba, C, GC003, Rock, C, GP001, Dr ama, P,
GP002, Ci enci a Fi cci n, P]
Li st a de gner os de canci ones
[ GC001, Bal ada, C, GC002, Samba, C, GC003, Rock, C]
Li st a de gner os de pel cul as
[ GP001, Dr ama, P, GP002, Ci enci a Fi cci n, P]
. . .

Podemos notar que aunque se despliega un mensaje de error amistoso, til para el
usuario final, no proporciona ninguna informacin sobre el error original ni sobre el
lugar donde ocurri el error, informacin necesaria para el desarrollador que depura el
cdigo. Para mostrar dicha informacin podemos agregarle a cada bloque cat ch la
sentencia:

f e. pr i nt St ackTr ace( ) ;

necesaria para desplegar la traza de las invocaciones a los mtodos en el momento de
generarse la excepcin. Si slo hubiramos envuelto la excepcin en otra sin conservar
la informacin de la excepcin original usando el siguiente cdigo en los bloques
cat ch dentro de los mtodos de la clase FachadaAr r egl os:

. . .
t r y {
cat al ogoGener os. el i mi na( gener o) ;
}
cat ch( Per si st enci aExcept i on pae) {
t hr ow new FachadaExcept i on( " No se puede el i mi nar el gner o) ;
}
. . .

Al ejecutar la aplicacin, tendremos lo mostrado en el siguiente fragmento del listado de
la corrida:

. . .
excepci ones. FachadaExcept i on: No se puede el i mi nar el gner o
at f achadas. FachadaAr r egl os. el i mi na( FachadaAr r egl os. j ava: 242)
at pr uebas. Pr ueba3. mai n( Pr ueba3. j ava: 144)
. . .

Podemos ver que en este caso la traza, mostrado al principio del listado, slo nos
muestra las invocaciones de mtodos hasta el punto donde se envolvi la excepcin
original lanzando la nueva excepcin. Sigue sin saberse dnde se gener la excepcin
original. Sin embargo si al envolver la excepcin original conservamos la informacin
172 Arreglos y Cadenas en Java

ITSON Manuel Domitsu Kono
de la excepcin original como se muestra en la clase FachadaArreglos, tendremos lo
mostrado en el siguiente fragmento del listado de la corrida al ejecutar la aplicacin:

excepci ones. FachadaExcept i on: No se puede el i mi nar el gner o
Se agr ego el gner o 1 al cat l ogo de gner os
Se agr ego el gner o 2 al cat l ogo de gner os
at f achadas. FachadaAr r egl os. el i mi na( FachadaAr r egl os. j ava: 242)
at pr uebas. Pr ueba3. mai n( Pr ueba3. j ava: 144)
Caused by: excepci ones. Per si st enci aExcept i on: Gner o i nexi st ent e
at per si st enci a. Gener os. el i mi na( Gener os. j ava: 118)
at f achadas. FachadaAr r egl os. el i mi na( FachadaAr r egl os. j ava: 239)
. . . 1 mor e

Podemos ver que en este caso la traza de invocaciones de mtodos contina hasta el
punto en que se gener la excepcin original.