Sei sulla pagina 1di 37

PROGRAMACION PAGINA 1 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

CONTENIDOS
5.1 ARRAYS EN JAVA ............................................................................................. 2
5.1.1 DECLARACION DE UN ARRAY ...............................................................................3
5.1.2 CREACION DE OBJETOS ARRAY .............................................................................3
5.1.3 ACCESO A LOS ELEMENTOS DE UN ARRAY ............................................................4
5.1.4 FOR MEJORADO ..................................................................................................5
5.1.5 INICIALIZACION DE UN ARRAY USANDO UN LITERAL .............................................5
5.1.6 ARRAYS COMO PARAMETROS ..............................................................................6
5.1.7 ARRAY COMO VALOR DE RETORNO EN UN METODO ............................................9
5.1.8 ARRAYS COMO ATRIBUTOS ................................................................................ 10
5.2 ARRAYS DE OBJETOS ...................................................................................... 11
5.2.1 INICIALIZACION DE UN ARRAY DE OBJETOS USANDO UN LITERAL ....................... 12
5.2.2 CREACION Y PASO DE UN ARRAY DE OBJETOS ANONIMO A UN METODO............ 13
5.3 BUSQUEDAS EN ARRAYS ................................................................................ 14
5.3.1 BUSQUEDA LINEAL ............................................................................................ 14
5.3.2 BUSQUEDA DICOTOMICA................................................................................... 14
5.4 ORDENACION DE ARRAYS .............................................................................. 16
5.4.1 ORDENACION POR INSERCION DIRECTA ............................................................. 16
5.4.2 ORDENACION POR SELECCION DIRECTA ............................................................. 18
5.4.3 ORDENACION POR EL METODO DE LA BURBUJA ................................................. 20
5.5 ARRAYS BIDIMENSIONALES ........................................................................... 21
5.5.1 DEFINICION DE ARRAYS BIDIMENSIONALES ........................................................ 21
5.5.2 ACCESO A LOS ELEMENTOS DE UN ARRAY BIDIMENSIONAL ................................ 22
5.5.3 INICIALIZACION DE ARRAYS BIDIMENSIONALES USANDO LITERALES ................... 22
5.5.4 ARRAYS BIDIMENSIONALES CON FILAS DE DIFERENTE LONGITUD ....................... 23
5.6 LIBRERIA DE CLASES DE JAVA ......................................................................... 25
5.6.1 DOCUMENTACION DE UNA CLASE ...................................................................... 25
5.6.2 INTERFACE VS IMPLEMENTACION ...................................................................... 26
5.6.3 PAQUETES Y SENTENCIA IMPORT ....................................................................... 26
5.7 LA CLASE STRING ........................................................................................... 28
5.7.1 CREACION DE OBJETOS STRING .......................................................................... 28
5.7.2 LONGITUD DE UNA CADENA .............................................................................. 29
5.7.3 ACCESO A CARACTERES...................................................................................... 29
5.7.4 CONCATENACION .............................................................................................. 29
5.7.5 SUBCADENAS .................................................................................................... 30
5.7.6 COMPARACION DE CADENAS ............................................................................. 30
5.8 LA CLASE STRINGBUILDER .............................................................................. 31
5.9 LA CLASE STRINGTOKENIZER .......................................................................... 32
5.10 METODO MAIN: ARGUMENTOS EN LINEA DE COMANDOS ............................. 34
PROGRAMACION PAGINA 2 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.11 EL TIPO ENUM ............................................................................................... 35


Muchas veces es necesario tratar en los programas conjuntos de datos del mismo tipo. Un
array es una estructura de datos de tamao fijo que permite guardar una serie de valores. Los
arrays tienen un soporte sintctico especial en Java. La razn es histrica: el array es una
estructura de datos clsica en los lenguajes de programacin y Java mantiene la sintaxis
ofrecida por otros lenguajes.

Para un programador Java es esencial saber trabajar con la librera Java (Java API), conocer
las clases que proporciona, cmo localizarlas, cmo leer y entender la documentacin.
Aprenderemos a manejarla y, en particular, nos centraremos en la clase String.

5.1 ARRAYS EN JAVA

A menudo es necesario agrupar una serie de valores para ser tratados de una forma
homognea:

la nota media de cada uno de los 20 alumnos de un grupo


la frecuencia de aparicin de cada una de las caras de un dado en una serie de
lanzamientos
la relacin de canciones que hay en un CD
el n de das que tiene cada uno de los meses del ao

Es posible agrupar todos estos valores creando una estructura de datos de longitud fija, un
array.

Un array es una coleccin de valores, todos del mismo tipo, que se tratan de una manera
especfica. Fsicamente los elementos de un array se sitan en memoria uno detrs de otro.
Los elementos del array se identifican por la posicin que ocupan dentro de l.

0 1 2 3 4 5 6

Vista lgica de un
array

Los valores que puede almacenar un array son:

de un tipo primitivo int, float, double, char, boolean, ..


de un tipo referencia array de objetos

Longitud: nmero de elementos del array


Tamao: espacio que ocupa un array en memoria (en bytes).

Tamao(array) = longitud(array) * tamao(elemento)

El tamao de un elemento de un array depende de su tipo de datos.

Ejemplo:

int[] numeros = new int[3]; // Longitud=3 Tamao=3x4 bytes=12 bytes


PROGRAMACION PAGINA 3 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

char[] vocales = new char[5]; //Longitud=5Tamao=5x2 bytes=10 bytes

5.1.1 DECLARACION DE UN ARRAY

Un array en Java se declara:

tipo[] nombre;

Ejemplo

int[] numeros;
char[] caracteres;
float[] notas;

La declaracin de un array indica el nombre de la variable array y el tipo de valores que va a


almacenar. En la declaracin no se especifica nada acerca de la longitud ni por tanto del
tamao del array (no se reserva memoria para l).

Ejer. 5.1. Declara:


un arrayprecios que almacene los precios de los diferentes artculos de una
tienda
un arrayplazasParking que indica si las plazas de un parking estn libres o no
un array que almacene los nombres de una serie de alumnos
un array que guarde la cantidad de lluvia cada en cada uno de los das del
mes de noviembre en una determinada ciudad

5.1.2 CREACION DE OBJETOS ARRAY

Un array es un objeto que se construye de una manera especial a travs del operador new(no
se llama al constructor con un nombre de clase como hemos visto hasta ahora con los objetos).

Ejemplo

int[ ] numeros; // Declaracin del array


numeros = new int[8]; //Creacin del objeto array

En este ejemplo, a travs del operador new se crea un objeto array con capacidad para
almacenar 8 nmeros enteros y se asocia la variable referencia numeros (la variable array) con
el objeto creado.

Cuando se declara:

int[] numeros; numeros NULL

Despus de:numeros = new int[8];


PROGRAMACION PAGINA 4 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

:int[]

numeros
0 1 2 3 4 5 6 7

En general, para crear un array:

new tipo[expresion];

donde:
tipo: especifica el tipo de los valores que almacenar el array
expresion: especifica el nmero de elementos del array (longitud)

Es posible declarar y crear un array en la misma sentencia,

double[] precios = new double[10];

Una vez se ha creado un array su longitud no puede ser modificada.

Como al resto de las variables, Java asigna a los elementos de un array un valor por defecto,
cero si son enteros o reales, \u0000 para caracteres, false para valores lgicos, null para los
objetos.

Ejer. 5.2. Suponiendo las DECLARACIONES del ejercicio anterior, crea:

un array para guardar los precios de 20 artculos


un array para las n plazas de un parking (n es una variable entera)
un array para almacenar los nombres de MAX alumnos (MAX es una
constante de valor 25)
un array que guarde la cantidad de lluvia cada en cada uno de los das del
mes de noviembre

5.1.3 ACCESO A LOS ELEMENTOS DE UN ARRAY

Los arrays tienen un atributo pblico (no un mtodo), length, que indica la longitud del array
(recordemos que los arrays son objetos y, por tanto, pueden tener atributos y mtodos).

int[] numeros = new int[20];

numeros.length Devuelve 20

Para acceder a los elementos de un array hay que indicar la posicin o ndice que ocupa el
elemento dentro de l. El valor del ndice vara entre 0 y length 1. Si se especifica un ndice
fuera del rango se genera un mensaje de error ArrayIndexOutOfBoundsException.

numeros[0] Primer elemento del array numeros


numeros[1] Segundo
nmeros[19] Ultimo elemento del array numeros
PROGRAMACION PAGINA 5 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Actividad 5.1. Define el array numeros e intenta mostrar por pantalla el elemento 15. Luego
intenta mostrar el elemento 20. Obtienes algn error?

En general casi siempre querremos recorrer un array accediendo a sus elementos para leerlos
o modificarlos. Esto lo haremos mediante una estructura iterativa como la sentencia for.

Ejemplo

Inicializacin del array numeros:

int[] numeros = new int[20];

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


numeros[i] = 2 * i;

:int[]

0 2 4 . ... ... 36 38
numeros
0 1 2 . . ... 18 19

Cada uno de los elementos de un array puede ser tratado como cualquier otra variable. El
elemento numeros[2] es una variable cuyo valor es 4 y podemos operar con ella de la misma
manera que lo haramos con cualquier otra variable entera.

5.1.4 FOR MEJORADO

Podemos recorrer un array accediendo a todos sus elementos usando un for mejorado para
mostrarlos por pantalla por ejemplo.

for (int e:numeros)


System.out.println(e);

La legibilidad es mejor y nos ahorramos de usar una variable ndice (como i) pero hay algunas
desventajas:
No es posible indicar que queremos recorrer solo una parte del array
No es posible modificar el array usando la variable e
No disponemos de un ndice para realizar determinados clculos

Actividad 5.2. Realizar un ejemplo con un for mejorado donde se intente inicializar un array

5.1.5 INICIALIZACION DE UN ARRAY USANDO UN LITERAL

Cuando se sabe a priori los valores que va a contener un array es posible declararlo e
inicializarlo en un solo paso, omitiendo la llamada al operador new usando un literal de array
(lista de valores entre llaves).

int[] diasMes = {31, 28, 31, 30, --- ,30, 31};


PROGRAMACION PAGINA 6 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

La sentencia anterior declara e inicializa una variable array que almacena una lista de 12
elementos cada uno de ellos con los valores especificados. Estos dos pasos no es posible
separarlos.

31 28 31 . ... ... 30 31

0 1 2 . . ... 10 11
diasMes

Ejer. 5.3. Escribe el cdigo para:


Asignar a la variable numeroElementos la longitud del arraydiasMes
Suponiendo que el ao es bisiesto asigna a febrero 29 das

Ejer. 5.4. Declara dentro del mtodo main en una clase Principal un array local de 5
elementos enteros e inicialzalo con los valores 1, 2, 3, 5, 7 (declara e inicializa en
una sola sentencia usando un literal de array). Muestra luego el contenido del
array por pantalla. Usa tambin el depurador para ver el contenido del array.

Ejer. 5.5. Completa el siguiente mtodo:

public String nombreDia(int numDiaSemana)


{
String[] nombres = {Lunes, Martes, Mircoles,
Jueves,Viernes,
Sabado, Domingo};
// Sentencias
}
Implementa el mtodo para que devuelva el nombre del da de la semana
correspondiente al nmero de da que se pasa al mtodo. Si el valor del parmetro
es incorrecto se devolver la cadena Da incorrecto. Suponemos que el lunes es
el da 1 y el domingo es el da 7.

5.1.6 ARRAYS COMO PARAMETROS

Un array puede ser pasado como parmetro a un mtodo. En este caso se pasa la referencia al
array. Esto quiere decir que si el mtodo modifica el parmetro los cambios se reflejarn en el
array original.

Siempre que tengamos un mtodo que recibe un array como parmetro es necesario
comprobar los siguientes casos:

Caso 1. Array es null


Caso 2. Array de longitud 0 (en este caso existe el objeto array pero est vaco, es decir, no
contiene ningn elemento)

Es posible crear un array de longitud 0 de la siguiente forma:


int[] valores = new int[0];

Dependiendo del problema, se permitir o no los casos 1 y 2.

Adems, podremos una vez comprobados esos casos reaccionar de 2 formas:


PROGRAMACION PAGINA 7 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

1. No hacer nada. Es decir, que el mtodo devuelva la ejecucin sin hacer nada especial.

2. Generar un error. En este caso sera mejor generar una excepcin para que pudiera ser
controlada por el mtodo llamante a provocar la finalizacin del programa mediante una
asercin.
PROGRAMACION PAGINA 8 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Ejemplo

public void invertir(int[] valores)


{
// No se pueden invertir null ni un array vaca
// Si el array tiene solo 1 elemento no se hace nada
if (valores==null || valores.length==0 | valores.length==1)
return;

int longitud = valores.length;


int aux = 0;
int limiteDerecha = longitud 1;

for (int i = 0; i < longitud/2; i++)


{
// Intercambio: valores[i] valores[limiteDerecha]
aux = valores[i];
valores[i] = valores[limiteDerecha];
valores[limiteDerecha] = aux;

limiteDerecha--;
}
}

public void mostrar(int[] valores)


{
if (valores==null || valores.length==0)
return;

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


System.out.print(valores[i] + ,);

System.out.println();
}

Si el array original es:

int[] valores = {1, 2, 3, 4, 5, 6, 7, 8, 9};

y hacemos,

invertir(valores);
mostrar(valores);

el resultado es 9, 8, 7, 6, 5, 4, 3, 2, 1,

Actividad 5.3. Modifica el mtodo mostrar para que muestre el array como una lista de
nmeros separados por coma pero sin la coma del final.

Actividad 5.4. Funcionara igual el mtodo mostrar() si eliminamos la condicin del if:
valores.length==0? Hay alguna razn para mantener esa comprobacin
aunque el mtodo funcione igual sin ella?
PROGRAMACION PAGINA 9 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Actividad 5.5. Sobrecarga el mtodo mostrar para que pueda ser usado pasndole un array o
bien pasndole un array y un separador (de tipo String). El separador por
defecto debe ser una coma.

Actividad 5.6. Modifica el mtodo invertir para controlar los casos 1 y 2 mediante una asercin

Actividad 5.7. Modifica el mtodo invertir para que use un mtodo privado llamado
intercambiar() que realice el intercambio de los elementos del array. Ese
mtodo debe servir para intercambiar 2 elementos de cualquier array que
reciba.

5.1.7 ARRAY COMO VALOR DE RETORNO EN UN METODO

Un mtodo puede devolver a travs de la sentencia return un array. El ejemplo anterior podra
modificarse de la siguiente manera:

Ejemplo

public int[] invertir(int[] valores)


{
int longitud = valores.length;
int[] resultado = new int[longitud];

for (int i = 0; i < longitud ; i++)


resultado[i] = valores[longitud (i + 1)];

return resultado;
}

Actividad 5.8. Modifica el mtodo invertir para controlar los casos 1 (null) y 2 (longitud 0)
mediante una sentencia if

En este ejemplo el array que se pasa como parmetro no cambia. Se crea uno local sobre el
que se realiza la inversin del array original y es el array local el que se devuelve a travs de la
sentencia return.

Ejer. 5.6. Implementa el siguiente mtodo que calcula la media aritmtica del array que
recibe como parmetro:

public double media(double[] notas)

Ejer. 5.7. Define un mtodo que reciba un array de enteros y devuelva el valor mximo.

Ejer. 5.8. Define un mtodo que reciba como parmetro un array de enteros y devuelva otro
array con los valores pares encontrados en el original.

Ejer. 5.9. Construye el siguiente mtodo que rota una posicin a la derecha el
arraynumeros.

public void rotarDerecha(int[] numeros)


PROGRAMACION PAGINA 10 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Ejer. 5.10. Implementa el mtodo

public int[] generarPares()

de la forma siguiente:

define un array local pares


genera nmeros aleatorios entre 1 y 50 y guarda en el array los que sean
pares
devuelve el array cuando est completo (la constante MAX indica la longitud
del array)

Ejer. 5.11. Completa el mtodo siguiente para que genere 100 nmeros aleatorios entre 0 y
n. Este mtodo debe devolver un array con la frecuencia de aparicin de cada
nmero.

public int[] frecuencias(int n)

5.1.8 ARRAYS COMO ATRIBUTOS

Una clase puede tener atributos que sean arrays. En este caso, el array puede declararse e
inicializarse tal como hemos visto en los ejemplos anteriores o, lo que es ms habitual, se crea
el array dinmicamente durante la ejecucin de un mtodo, por ejemplo, el constructor de la
clase.

Ejemplo

public class Ejemplo


{
private int[] numeros;

public Ejemplo()
{
numeros = new int[9];
inicializarNumeros();
}

private void inicializarNumeros()


{
for (int i = 0; i < numeros.length;i++)
numeros[i] = i + 1;
}
}

Ver:
Video: nuevas caractersticas de Java 7. Inicializadores de clases y de objetos
(ejemplo aceitunas)
Traduccin de relaciones (asociacin, agregacin, composicin)
PROGRAMACION PAGINA 11 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.2 ARRAYS DE OBJETOS

El tipo base de los elementos de un array puede ser, adems de un tipo primitivo, un tipo
referencia. Esto permite construir arrays de objetos.

Los arrays cuyos elementos son de un tipo referencia se definen de la misma manera solo que
ahora el tipo de los elementos ser una clase.

Ejemplo

String[] listaPalabras = new String[10];


Persona[] familia = new Persona[6];
Alumno[] curso = new Alumno[MAX];

Tomemos la sentencia,

Persona[] familia = new Persona[6];

En esa sentencia se est definiendo un array llamado familia. Se est declarando el array de
nombre familia dnde cada elemento es del tipo Persona (Persona es una clase). Adems se
est creando un array con capacidad para 6 personas. El nuevo array creado se asigna a la
variable array familia.

NULL NULL NULL NULL NULL NULL

0 1 2 3 4 5
familia

Cuando se crea el array familia cada una de las referencias vale NULL. Todava no se han
creado las personas de la familia. Hay que crear cada uno de los objetos Persona y asignarlo a
cada elemento del array. Esto puede hacerse de muchas formas dependiendo del problema.

Ejemplo

familia[3] = new Persona(Pedro,46);


familia[4] = new Persona(Luisa,45);

Despus de crear los objetos Persona el array queda:

0 1 2 3 4 5
familia

:Persona

:Persona Luisa
45
Pedro
46
PROGRAMACION PAGINA 12 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Ejer. 5.12. Define una clase Baraja que contenga un mazo de 40 cartas (baraja espaola).
Cada carta ser un objeto de la clase Carta que contiene un nmero de carta, un
nombre de carta y el palo (BASTOS, COPAS, ESPADAS, OROS). Crear un tipo
enumerado para los palos de la baraja.

5.2.1 INICIALIZACION DE UN ARRAY DE OBJETOS USANDO UN LITERAL

Podemos definir un array de objetos e inicializarlo en una sola sentencia usando un literal de
array para especificar sus elementos.

Ejemplo

En la figura anterior vemos que es posible inicializar un array de objetos usando un literal de
array con o sin la palabra clave new.
PROGRAMACION PAGINA 13 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.2.2 CREACION Y PASO DE UN ARRAY DE OBJETOS ANONIMO A UN METODO

En este caso s que estamos obligados a usar la palabra clave new especificando el tipo de los
elementos del array de objetos que estamos creando.

Vemos el error que obtenemos si lo hacemos mal

Actividad 5.9. Modificar el programa anterior para que muestre los personajes correctamente
evitando el error
PROGRAMACION PAGINA 14 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.3 BUSQUEDAS EN ARRAYS

Una de las operaciones ms frecuentes sobre un array de cualquier tipo es buscar un


determinado valor.

Estudiaremos dos de los algoritmos de bsqueda ms habituales: la bsqueda linealy la


bsqueda dicotmica.

5.3.1 BUSQUEDA LINEAL

Para efectuar una bsqueda lineal no se necesita ningn requisito, el array puede estar o no
ordenado. La bsqueda lineal consiste en recorrer uno a uno, desde el principio, los elementos
del array y compararlos con el valor buscado. La bsqueda termina cuando se encuentra el
elemento o cuando se acaba el array sin haberlo localizado.

Ejemplo

public boolean buscarLineal(int[] numeros, int valorBuscado)


{
boolean encontrado = false;
int i = 0;

while (i < numeros.length && !encontrado)


if (numeros[i] == valorBuscado)
encontrado = true;
else
i++;

return encontrado;
}

Ejer. 5.13. Modifica el mtodo buscarLineal() para que devuelva la posicin donde se ha
encontrado el elemento o 1 si no est.

5.3.2 BUSQUEDA DICOTOMICA

Para efectuar una bsqueda dicotmica se requiere que el array est ordenado.

El algoritmo de bsqueda dicotmica compara el valor buscado con el que ocupa la posicin
central del array:

si el valor coincide la bsqueda termina


si el valor buscado es menor que el de la posicin mitad se reduce el intervalo de bsqueda
a la izquierda de este valor
si el valor buscado es mayor que el de la posicin mitad la bsqueda contina por la
derecha
Este proceso se repite hasta localizar el elemento o hasta que el intervalo de bsqueda quede
anulado.

Ejemplo
PROGRAMACION PAGINA 15 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

public boolean buscarDicotomica(int[] numeros, int valorBuscado)


{
boolean encontrado = false;
int izquierda = 0;
int derecha = numeros.length 1;
int mitad = 0;

while (izquierda<=derecha && !encontrado)


{
mitad = (izquierda + derecha) / 2;
if (numeros[mitad] == valorBuscado)
encontrado = true;
else if (numeros[mitad] > valorBuscado)
derecha = mitad - 1;
else
izquierda = mitad + 1;
}

return encontrado;
}

Ejemplo
PROGRAMACION PAGINA 16 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.4 ORDENACION DE ARRAYS

Ordenar un array significa reagrupar sus elementos en un determinado orden:

CRITERIO DE ORDENACION
o ascendente (creciente) de menor a mayor
o descendente (decreciente) de mayor a menor
CRITERIO DE COMPARACION
o TIPOS PRIMITIVOS (<,<=,>,>=,==,!=)
o TIPOS NO PRIMITIVOS ( METODOS: compareTo() )

5.4.1 ORDENACION POR INSERCION DIRECTA

Este mtodo de ordenacin se basa en considerar una parte del array ya ordenado y situar
cada uno de los elementos restantes insertndolos en el lugar que le corresponda segn su
valor.

Se repite el siguiente proceso desde el 2 elemento hasta el ltimo:


er
Se toma el 1 elemento de entre los que quedan sin ordenar y se inserta en el lugarque le
corresponda entre los elementos situados a su izquierda (que ya estn ordenados)
desplazando los componentes superiores al tratado un lugar hacia la derecha

24 12 36 5 7 15
12 24 36 5 7 15 Paso 1
12 24 36 5 7 15 Paso 2
5 12 24 36 7 15 Paso 3
5 7 12 24 36 15 Paso 4
5 7 12 15 24 36 Paso 5

public void ordenarInsercionDirecta(int[] array)


{
int aux, j;

for ( int i = 1; i < array.length; i++)


{
aux = array[i];
j = i 1;

while (j >= 0 && array[j] > aux)


{
array[j + 1] = array[j];
j--;
}

array[j + 1] = aux;
}
}
PROGRAMACION PAGINA 17 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
PROGRAMACION PAGINA 18 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.4.2 ORDENACION POR SELECCION DIRECTA

El mtodo consiste en seleccionar en cada paso de ordenacin el elemento de menor valor de


entre los que quedan por ordenar e intercambiarlo con el primero de la secuencia que se est
tratando en ese paso. El proceso se repite desde el primero al penltimo elemento del array.

24 12 36 5 7 15
5 12 36 24 7 15 Paso 1
5 7 36 24 12 15 Paso 2
5 7 12 24 36 15 Paso 3
5 7 12 15 36 24 Paso 4
5 7 12 15 24 36 Paso 5

En rojo: la secuencia a tratar (no ordenada)

public void ordenarSeleccionDirecta(int[] array)


{
int posmin, aux;

for (int i = 0; i <array.length-1; i++)


{
posmin = i;
for (int j=i+1; j < array.length; j++)
if (array[j] < array[posmin])
posmin = j;

aux = array[posmin];
array[posmin] = array[i];
array[i] = aux;
}
}
PROGRAMACION PAGINA 19 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
PROGRAMACION PAGINA 20 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.4.3 ORDENACION POR EL METODO DE LA BURBUJA


https://en.wikipedia.org/wiki/Bubble_sort

Ejer. 5.14.
Define una clase Palabra que modela una palabra de un diccionario ingls-castellano. De
cada palabra se guarda su expresin en castellano y en ingls. Incluye el constructor con
parmetros y mtodos accesores, getCastellano() y getIngles(), adems del mtodo
toString() que devuelve un String de la forma palabra castellano palabra ingls
Define una clase Diccionario con un atributo palabras que es un array del tipo Palabra. La
clase incluye tambin una constante de clase, MAXPALABRAS que indica el n mximo de
palabras que almacenar el diccionario. Aade un atributo adicional pos que indicar la
siguiente posicin en la que se aadir una nueva palabra al diccionario.
Aade a la clase el constructor con un parmetro numPalabras que indica el n de palabras
que tendr el Diccionario (controlar mediante una asercin que numPalabras<=
MAXPALABRAS).
Aade un mtodo agregar() que toma una palabra como argumento y la aade al
diccionario. Solo se puede insertar si hay sitio en la lista (esto nos lo puede indicar pos) y si
la palabra no est repetida
Aade un mtodo eliminar() que toma una palabra como argumento y la elimina del
diccionario. Se debe reorganizar el diccionario para evitar huecos desplazando las palabras
hacia el principio.
Incluye un nuevo mtodo, palabra() , que devuelve la palabra de una determinada
posicin que se pasa como parmetro al mtodo (si la posicin no es correcta devuelve
null).
Se debe permitir ordenar() el diccionario (ascendente). Usar alguno de los algoritmos de
ordenacin vistos.
Aade el mtodo toString() que muestra en pantalla cada una de las palabras separadas
por coma (utilizaremos toString() de Palabra)
Crea una clase InterfazDiccionario que permita a un usuario interactuar con un diccionario
mostrndole las diferentes opciones de que dispone: aadir una nueva palabra, eliminar
una palabra, mostrar el diccionario, ordenar el diccionario, obtener la traduccin de una
palabra de una determinada posicin,
Dibuja el diagrama de clases UML de este ejercicio
PROGRAMACION PAGINA 21 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.5 ARRAYS BIDIMENSIONALES

Hasta ahora todos los arrays utilizados han sido de una dimensin (unidimensionales),
colecciones lineales de elementos. Basta un ndice para indicar la posicin del elemento dentro
del array.

Los arrays pueden ser bidimensionales (en general la dimensin puede ser cualquiera, 1,2 3,..).

Un array bidimensional puede representarse lgicamente de forma tabular, como una serie de
filas y columnas.

Array de m filas y n columnas (m x n)

0 1 2 n-1
0
1
2

m-1

5.5.1 DEFINICION DE ARRAYS BIDIMENSIONALES

Para declarar un array bidimensional:

tipo[][] nombre;

Ejemplo

int[][] matriz; // Declaracin de un array bidimensional de enteros

Si queremos crear la matriz con 5 filas y 3 columnas haremos:

matriz = new int[5][3];

El primer valor entre corchetes indica las filas que tendr el array y el segundo valor indica las
columnas (un array bidimensional se puede considerar un array de arrays).
PROGRAMACION PAGINA 22 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.5.2 ACCESO A LOS ELEMENTOS DE UN ARRAY BIDIMENSIONAL

Para acceder a los elementos de un array de 2 dimensiones hay que especificar 2 ndices, el 1
indica la fila dentro del array, y el 2 la columna.

Ejemplo

El siguiente trozo de cdigo inicializa la matriz anterior con valores aleatorios:

for (int fila = 0; fila < matriz.length; fila++)


for (int columna = 0; columna < matriz[fila].length; columna++)
matriz[fila][columna] = (int) (Math.random() * 30 + 1);

matriz.length devuelve el n de filas del array matriz

matriz[fila].length devuelve el n de elementos del array matriz[fila]


(es el n de columnas de la fila fila)

5.5.3 INICIALIZACION DE ARRAYS BIDIMENSIONALES USANDO LITERALES

Podemos declarar e inicializar, en un solo paso , con una serie de valores un array de dos
dimensiones.

Ejemplo

int[][] miArray = { {1, 2, 3},


{5, 6, 7},
{9, 10, 11},
{0, 6, 8} };

En el ejemplo anterior se declara, crea e inicializa un array de 4 filas y 3 columnas.

Ejer. 5.15. Implementa el siguiente mtodo que devuelve la matriz identidad


La matriz identidad tiene la diagonal principal a 1 y el resto de los elementos a 0.

public int[][] matrizIdentidad()


PROGRAMACION PAGINA 23 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.5.4 ARRAYS BIDIMENSIONALES CON FILAS DE DIFERENTE LONGITUD

Cada fila de un array bidimensional es un array en s mismo. Es por ello que las filas pueden
tener distinta longitud (ragged array arrays desiguales).

Ejemplo

int[][] arrayTriangular = { {1, 2, 3, 4, 5},


{5, 6, 7, 8},
{9, 10, 11},
{8, 18},
{7} };

Actividad 5.10. Intenta crear el array desigual realizando la declaracin y la inicializacin en


sentencias distintas. Usa el operador new. Recuerda que en realidad un array
bidimensional es un array de filas donde cada fila es a su vez un array de
elementos del tipo de datos del array bidimensional.

Ejer. 5.16. La clase Curso contiene estudiantes y sus notas obtenidas en una serie de
asignaturas.

public class Curso


{
private static final int MAXESTUDIANTES = 5;
private static final int MAXASIGNATURAS = 3;
// Array de estudiantes
private int notas[][];

// Sentencias
}

a) Declara un atributo array para almacenar los estudiantes del curso

b) Crea un constructor para que cree e inicialice el array de estudiantes a partir


de un array de nombres recibido como parmetro. Adems debes crear e
inicializar el array de notas. Debes usar los mtodos privados auxiliares:
inicializarEstudiantes()
inicializarNotas() -> Notas sern aleatorias entre 1 y 10
Las filas del array bidimensional notas representan las notas de un estudiante
almacenadas como notas por asignatura. Cada columna representa una
asignatura.

c) Escribe un mtodo que devuelva un array con las notas medias por alumno.
Se usar la media aritmtica en este caso.
public float[] mediasA()

d) Escribe un mtodo que devuelva la media ponderada por alumno dada un


array de pesos como parmetro. La suma de los elementos del array de pesos
debe ser 1.
public float[] mediasP(float pesos)

e) Crea un mtodo llamado suspensos que devuelva un array de estudiantes que


tienen x suspensos o ms.
PROGRAMACION PAGINA 24 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

public float[] suspensos(int x)

f) Crea un mtodo llamado mostrar que muestre por pantalla un array de


estudiantes recibido como parmetro.
public void mostrar(...)

Usa el mtodo mostrar para mostrar por pantalla todos los estudiantes
suspensos (aparecern como una lista separadas por coma)

Ejer. 5.17. Crea otra versin del ejercicio anterior en el que se generen notas desde -1 a 10.
Se representa por -1 el caso de un alumno que no est matriculado en una
asignatura. Actualiza el mtodo mediasA() para que se calcule correctamente la
nota media de un alumno no contabilizando las notas de las asignaturas en las
que no est matriculado.

Ejer. 5.18. En el ejercicio de la clase Curso crea un mtodo llamado notasDesigual() que
devuelva un array con filas desiguales con las notas de cada alumno por filas
exceptuando las notas de asignaturas en las que el alumno no est matriculado.
Tiene sentido usar luego ese array desigual? Se pierde informacin no
recuperable?

Ejer. 5.19. Usa los inicializadores de clase y de objetos (nuevas caractersticas de Java 7)
para inicializar el array de estudiantes y el array de notas. Usa e inicializa un array
de nombres esttico en vez del parmetro nombres del constructor de la clase
Curso.
PROGRAMACION PAGINA 25 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.6 LIBRERIA DE CLASES DE JAVA

La librera de clases de Java (Java API: Application Programmers Interface) consiste en


cientos de clases tiles para nuestros proyectos. Cada una de estas clases tiene muchos
mtodos, con o sin parmetros, con o sin valor de retorno.

Un programador Java debe ser capaz de trabajar con la API conociendo muchas de sus clases,
pero sobre todo sabiendo cmo explorar e investigar entre la documentacin aquellas clases
que necesite.

La API de Java est bastante bien documentada. La documentacin est disponible en HTML
por lo que puede ser leda en un navegador web.

Nota
Para utilizar una copia local de la documentacin de la API de Java en BlueJ se
descomprime el fichero .zip que contiene la documentacin en el lugar del disco en que
queramos ubicarla. As se crea una carpeta docs.
Abrimos el navegador y utilizando Abrir Fichero abrimos el fichero index.html que est
en la carpeta docs/api
Copiamos la direccin URL desde el campo direccin de nuestro navegador
Abrimos BlueJ y en Tools/Preferences/Miscellaneus pegamos la URL en el campo JDK
documentacin URL (desactivamos la casilla Use this URL ......)

Leer y entender la documentacin es la primera tarea a realizar para poder trabajar con la API.
Ms adelante aprenderemos a preparar nuestras propias clases para que otras personas
puedan utilizarla de la misma manera que la librera estndar.

5.6.1 DOCUMENTACION DE UNA CLASE

Para poder leer la documentacin de una clase desde BlueJ elegimos Java Class Libraries
desde el men Help. Se abre el navegador y visualiza la pgina principal de la Java API. El
explorador muestra tres partes:

arriba a la izquierda podemos ver una lista de paquetes


abajo una lista de todas las clases de Java
en la ventana central aparecen los detalles de la clase o paquete seleccionado

Ejer. 5.20.
Localiza la clase Random en la documentacin de Java. En qu paquete est? Cmo se
crea una instancia? Qu hace el mtodo nextInt()?
Busca la clase Math. En qu paquete est? Qu hace el mtodo round()? Qu es PI?
Comprueba que est configurada correctamente la URL de la documentacin del JDK
actual en las preferencias de BlueJ
PROGRAMACION PAGINA 26 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.6.2 INTERFACE VS IMPLEMENTACION

La documentacin de una clase incluye:

el nombre de la clase
una descripcin general de la clase
la lista de los constructores y mtodos de la clase
los valores de retorno y parmetros para los constructores y mtodos
una descripcin del propsito de cada constructor y mtodo

La interface de una clase est formada por todos sus miembros pblicos (en general por los
miembros no privados de la clase). La interface no muestra el cdigo fuente de la clase,
describe lo que una clase puede hacer (los servicios que proporciona) y cmo puede ser
utilizada sin mostrar su implementacin (cmo lo hace). La interface es la parte visible,
constituye una abstraccin.

La documentacin no muestra:

el cdigo fuente
los atributos privados
mtodos privados

El cdigo fuente que define una clase constituye su implementacin. Un programador trabaja
en la implementacin de una clase y al mismo tiempo hace uso de otras clases va sus
interfaces.

El trmino interfaz puede aplicarse tambin a un mtodo individual. El interfaz de un mtodo


consiste en su signatura que indica:

el modificador de acceso (public, private, protected, package-private)


el tipo del valor de retorno
el nombre del mtodo
la lista de parmetros formales y sus tipos

Ejemplo

public int maximo(int x, int y)

La interface de un mtodo proporciona todo lo que necesitamos para saber utilizar el mtodo.

5.6.3 PAQUETES Y SENTENCIA IMPORT

Las clases de la API de Java no estn automticamente disponibles para su uso como ocurre
con las clases de nuestro proyecto actual. Hay que indicar en el cdigo fuente que queremos
utilizar una clase de la librera. A esto se llama importar la clase y se realiza con la sentencia
import.

Java utiliza paquetes para organizar en grupos la multitud de clases de su librera. Un paquete
es un conjunto de clases (e interfaces) lgicamente relacionadas. Los paquetes pueden
anidarse (un paquete puede contener otro paquete).
PROGRAMACION PAGINA 27 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Por ejemplo, la clase Random est dentro del paquete java.util. El nombre completo o nombre
calificado de la clase es el nombre del paquete que la contiene seguido por un punto y el
nombre de la clase:

java.util.Random

Java permite importar paquetes completos:

import java.util.*;

java Paquete
util Subpaquete
* Todas las clases

La sentencia se incluye al principio del cdigo fuente de la clase que vaya a utilizar la librera:

import java.util.Random;

Una clase de un paquete se puede utilizar sin incluir una sentencia import si se utiliza el
nombre completo (calificado) de la clase (aunque esta opcin no es muy cmoda).

Hay algunas clases que se utilizan muy frecuentemente, como la clase String. Estas clases
estn situadas en el paquete java.lang. Este paquete se importa automticamente en cada
clase.

Importacin de miembros estticos de clases:


import static
Ver: https://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html
PROGRAMACION PAGINA 28 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

5.7 LA CLASE STRING

Una cadena es una secuencia de caracteres. En muchos lenguajes las cadenas se tratan como
arrays de caracteres, en Java una cadena es un objeto. Java proporciona las clases String,
StringBuilder y StringTokenizer para almacenar y procesar cadenas. En la mayora de los
casos utilizaremos la clase String para crear cadenas de caracteres.

La clase String se incluye en el paquete java.lang. Esta clase:

a) modela una secuencia de caracteres y


b) proporciona mltiples constructores y mtodos para tratar de forma individual los
caracteres, comparar cadenas, buscar subcadenas, extraer subcadenas, ....

El valor de una cadena se escribe entre .

5.7.1 CREACION DE OBJETOS STRING

Como cualquier otro objeto creamos un objeto de la clase String llamando al constructor de la
clase:

String cadena = new String(); // Crea una cadena vaca


String cadena = new String(Ejemplo de cadena);

Hay una forma abreviada de crear e inicializar un objeto String:

String cadena = Bienvenido a Java;

Si nicamente hacemos,

String cadena;

se crea una referencia a un objeto String. Puesto que una cadena es un objeto, una variable de
tipo String almacena una referencia al objeto String que contiene la cadena.

String cadena = EJEMPLO;

cadena E J E M P L O
0 1 2 3 4 5 6

Un objeto String es inmutable. Una vez creado su contenido no puede cambiar, contendr esa
cadena toda su vida.

La primera sentencia crea un objeto con el contenido Java y asigna su referencia a la variable
laCadena.

La segunda sentencia crea un nuevo objeto con el contenido HTML y asigna la nueva
referencia a la variable laCadena.
PROGRAMACION PAGINA 29 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

String laCadena = Java;


String laCadena = HTML;

5.7.2 LONGITUD DE UNA CADENA

La longitud de una cadena se obtiene mediante el mtodo length() .

String cadena = Hola;


int longitud = cadena.length(); // longitud = 4

5.7.3 ACCESO A CARACTERES

El acceso a cada uno de los caracteres de un objeto String se realiza con el mtodo charAt()
que devuelve el carcter de la posicin pos.

char charAt(int index) // index est entre 0 y cadena.length()1

String cadena = new String(Hola mundo);


char c = cadena.charAt(5); // c = m
int indice = 8;
System.out.println(cadena.charAt(indice)); // Muestra d

5.7.4 CONCATENACION

Para concatenar dos cadenas se utiliza el mtodo concat()

String concat(String cadena)

String str1 = Bienvenido ;


String str2 = al lenguaje Java;
String str3 = str1.concat(str2); // str3 es Bienvenido al lenguaje Java

La concatenacin de cadenas es una operacin tan comn que Java proporciona un


mecanismo ms cmodo a travs del operador +.
PROGRAMACION PAGINA 30 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

String str1 = Hola;


String str2 = todos;
String resul = str1 + a +str2; // Hola a todos

Recordemos que el operador + tambin concatena una cadena con un tipo primitivo tal como
un int, double o char. El valor del tipo primitivo se convierte automticamente a String y luego
se concatena.

int numero = 3;
String str = Resultado = + numero;
System.out.println(str);

5.7.5 SUBCADENAS

Para extraer subcadenas se utiliza el mtodo substring(). Este mtodo est sobrecargado y
tiene dos versiones:

public String substring(int beginIndex)


Devuelve una subcadena desde la posicin beginIndex hasta el final de la cadena

public String substring(int beginIndex, int endIndex)


Devuelve una subcadena desde beginIndex hasta endIndex-1
La longitud de la subcadena devuelta es endIndex-beginIndex

String mensaje = Hola;


String str1 = mensaje.substring(1); // str1 vale ola
String str2 = mensaje.substring(1, 3); // str2 vale ol

5.7.6 COMPARACION DE CADENAS

Para comparar el contenido de dos objetos String debemos utilizar el mtodo equals()

boolean equals(Object obj)

En general este mtodo permite comparar dos objetos cualesquiera (siempre que el
mtodo equals est sobrecargado en la clase a comparar), tambin objetos String.

String mensaje = Hola;

if (mensaje.equals(Hola))
// Sentencias

Actividad 5.11. Declara dos variables de tipo String llamadas s1 y s2 e inicializalas con la
cadena literal HOLA. La condicin s1==s2 es verdadera o falsa en este
caso? Y la condicin s1.equals(s2)? Por qu? Haz lo mismo pero creando
los objetos String usando el operador new. Qu ocurre ahora?
PROGRAMACION PAGINA 31 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Tambin se puede utilizar el mtodo compareTo()

int compareTo(String s)

Este mtodo devuelve un valor:

if (a.compareTo(b) == 0)
// Sentencias

0 si las dos cadenas que se comparan son iguales


<0 si a es menor que b (pensar que si a-b < 0 significa que a es menor que b)
>0 si a mayor que b (pensar que si a-b > 0 significar que a es mayor que b)

Cuando se comparan dos cadenas la comparacin es lexicogrfica y sensible a


maysculas (la comparacin se hace carcter a carcter, por ejemplo, abc es menor
que abg)

Nunca hay que utilizar el operador == para comparar dos cadenas . if (a == b) compara las
referencias a y b, se comprueba si apuntan al mismo objeto no si se trata de la misma
secuencia de caracteres. El operador == sirve para comparar tipos primitivos y no tipos objeto.

Ejer. 5.21. Consulta en la documentacin Java la clase String. Localiza los siguientes
mtodos y anota su signatura. Da una breve explicacin de lo que hacen y pon un
ejemplo.

equalsIgnoreCase() replace()

startsWith() replaceFirst()

endWith() replaceAll()

toLowerCase() indexOf()

toUpperCase() split()
trim()
valueOf()

5.8 LA CLASE STRINGBUILDER

Los objetos String son inmutables, una vez asignado un valor ste no puede modificarse. Java
crea un nuevo objeto String cuando se le asigna un nuevo valor.

La clase StringBuilder modela cadenas que pueden ser modificadas (la clase StringBuffer
ofreca la misma funcionalidad hasta la aparicin de StringBuilder con Java 1.5).

La clase StringBuilder est en el paquete java.lang.Los mtodos de StringBuilder no pueden


ser usados con String. Las operaciones principales con objetos de este tipo son las de aadir e
insertar.

La clase incluye, entre otros, los siguientes constructores y mtodos:

newStringBuilder() construye una cadena vaca con una capacidad inicial de 16


caracteres
PROGRAMACION PAGINA 32 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

newStringBuilder(String s) construye un objeto StringBuilder a partir del contenido


del objeto String s

intlength() devuelve el n de caracteres actualmente almacenados en la cadena

charcharAt(intindice) devuelve el carcter de la posicin marcada por indice (el


primer carcter tiene ndice 0)

voidsetCharAt(intindice, char c) se asigna a la posicin indice el carcter c

StringBuilderappend(String s) aade la cadena s al final del objetoStringBuilder

StringBuilderappend(StringBuilder s) aade el objetoStringBuilder s al objeto


actual

StringBuilderdelete(int inicio, int final) borra los caracteres entre inicio y final 1

StringBuilderdeleteCharAt(intindice) borra el carcter de la posicin indice

StringBuilderinsert(intposicion, String s) inserta la cadena s a partir de posicion

Ejemplo

public String borrarLaE(String original)


{
StringBuilder resul = new StringBuilder(original);

int i = 0;

while (i < resul.length()) {


if (resul.charAt(i) == E)
resul.deleteCharAt(i);
else
i++;

return resul.toString();
}

5.9 LA CLASE STRINGTOKENIZER

La clase StringTokenizer permite partir una cadena en subcadenas individuales segn un


criterio de separacin. Por ejemplo, se pueden extraer las palabras de una frase teniendo en
cuenta que estn separadas por blancos.

El delimitador se utiliza para indicar el carcter/es separadores de las palabras o tokens. El


delimitador por defecto es el blanco (espacio o tabulador o salto de lnea) pero se pueden
especificar otros como la , o : o //

La clase se encuentra en el paquete java.util.

newStringTokenizer(String s) construye un stringtokenizer a partir de la cadena s. En este


caso el delimitador es el espacio en blanco
PROGRAMACION PAGINA 33 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

newStringTokenizer(String s, String delimitador) construye un stringtokenizer a partir de la


cadena s indicado que el delimitador es el especificado.

intcountTokens() devuelve el n de tokens de la cadena

StringnextToken() devuelve el String que representa el siguiente token

booleanhasMoreTokens() devuelve true si hay ms tokens en la cadena


PROGRAMACION PAGINA 34 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Ejemplo

import java.util.StringTokenizer;

public void ejemploStringTokenizer()


{
final String SEPARADOR = ,;
String cadena = Esto, es, un, ejemplo;
StringTokenizer frase = new StringTokenizer(cadena, SEPARADOR);
String unaPalabra = ;

while (frase.hasMoreTokens())
{
unaPalabra = frase.nextToken();
System.out.println(unaPalabra);
}

5.10 METODO MAIN: ARGUMENTOS EN LINEA DE COMANDOS

Ya sabemos que para iniciar una aplicacin Java fuera del entorno BlueJ necesitamos invocar
a un mtodo sin que exista ningn objeto an. Este mtodo es un mtodo de clase (esttico)
denominado main(). El usuario indica la clase que debe iniciarse (desde la lnea de comando
ejecutando java nombre_clase) y esta clase es la que contendr el mtodo main().

El mtodo main tena un signatura especfica:

public static void main(String[] args)

El parmetro formal del mtodo main es un array de tipo String: String[ ] args. Esto permite al
usuario pasar argumentos (parmetros actuales) adicionales en la lnea de comandos cuando
se invoca a una clase Java para su ejecucin.

Ejemplo

C:\>java Juego 2 Elisa

parmetros que se
pasan en la llamada

Llamada a la nombre de la clase


JVM que contiene a
main

Cada valor incluido en la lnea de comandos despus del nombre de la clase se lee como una
cadena (objeto String) separado y se pasa al mtodo main como un elemento del array args.
En nuestro ejemplo, el array args contendr 2 elementos, las cadenas 2 y Elisa

:String[]
2 Elisa
args 0 1
PROGRAMACION PAGINA 35 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

Ejemplo

public class Juego


{
public static void main(String[ ] args)
{
if (args.length == 2)
{
int edad = Integer.parseInt(args[0]));
String alias = args[1];
Jugador p = new Jugador(alias, edad);
} else
System.out.println(Uso: Juego edad alias) ;
}
}

Desde BlueJ podemos invocar al mtodo main de una clase y pasar un array de String como
argumentos del mtodo pasando un array de constantes: {2, Elisa}

5.11 EL TIPO ENUM

DOCUMENTACION y EJEMPLOS: https://trello.com/c/VX8WqauX

Java 1.5 introduce un nuevo tipo denominado tipo enumerado. La sintaxis completa de este
nuevo tipo est muy cerca de la definicin de una clase. Nosotros solo veremos una
simplificacin del tipo.

El siguiente ejemplo muestra una manera habitual de asociar nombres simblicos a valores
numricos a travs de constantes.

public class Control


{
private static final int BAJO = 0;
private static final int MEDIO = 1;
private static final int ALTO = 2;
private int nivel;

public Control()
{
nivel = BAJO;
}

public int getNivel()


{
return nivel;
}

public void setNivel(int nivel)


{
this.nivel = nivel;
}
}
PROGRAMACION PAGINA 36 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

El mayor problema con este cdigo es que no hay garanta de que en el mtodo setNivel() el
valor pasado sea un entero vlido, coincida con uno de los tres elegidos para las constantes (a
menos que se testee el valor del parmetro pasado).

El tipo enumerado proporciona una buena solucin a este problema.

public class Control public enum Nivel


{ {
private Nivel nivel; BAJO, MEDIO, ALTO;
}
public Control()
{
nivel = Nivel.BAJO;
}

public Nivel getNivel()


{
return nivel;
}

public void setNivel(Nivel nivel)


{
this.nivel = nivel;
}
}

En su forma ms simple un tipo enumerado permite crear un tipo dedicado para un conjunto de
nombres, como BAJO, MEDIO, ALTO. Los valores de este tipo se refieren ahora como
Nivel.BAJO, Nivel.MEDIO, Nivel.ALTO.

El tipo del atributo nivel es ahora Nivel y no un int. El mtodo setNivel() est hora protegido de
recibir un parmetro de valor inadecuado pues el argumento actual debe coincidir ahora con
uno de los tres valores posibles del tipo. De la misma manera un cliente que llame al mtodo
getNivel() no podr tratar el valor devuelto como un entero ordinario.

Para crear, por tanto, un tipo enumerado:

especificaremos la clusula enum


indicaremos el nombre del tipo
enumeraremos la lista de valores del tipo (por convencin se escriben en maysculas)

Desde BlueJ podremos crear un tipo enumerado New Class / Enum.

Algunas consideraciones acerca de los tipos enumerados:

son clases
no son enteros
no tienen constructor pblico
los valores del tipo son public, static, final
heredan el mtodo toString() Nivel.MEDIO.toString() devuelve la cadena MEDIO.
Este mtodo se puede redefinir dentro del tipo enumerado
PROGRAMACION PAGINA 37 (DE 37)

VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)

proporcionan un mtodo esttico valueOf() complementa a


toString().Nivel.valueOf(MEDIO) devuelve Nivel.MEDIO

cada enumerado define un mtodo pblico esttico values() que devuelve un array
cuyos elementos contienen los valores del tipo

Nivel[ ] niveles = Nivel.values();


for (int i = 0; i < niveles.length; i++)
System.out.println(niveles[i]);

Ejer. 5.22. Define los siguientes tipos enumerados:

Palo que define los palos que puede tomar una carta de la baraja espaola
Estacion define las estaciones del ao
Nota define las notas posibles de un estudiante (notable, suficiente, ....)

ANEXO A

javadoc (Ej: ver comentarios en cdigo fuente de la


clase String usando NetBeans)
paquetes definidos por el usuario miLib (clases
utility Entrada, Salida)
excepciones Libro [CERTIFIED] Cap. 8
nuevas caractersticas de Java Ver libros: Java 7
New FeaturesCookbook y buscar equivalente para
Java 8
tipos enumerados (con constructores y mtodos),
aplicacin a gestin de errores (ver NorthConcepts-
Exceptions)
Videotutorial de Lynda.com: Java Advanced Training
(inicializadores de clase y de instancia). Ejemplo
aceitunas, inicializacin de arrays.

Potrebbero piacerti anche