Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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)
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.
A menudo es necesario agrupar una serie de valores para ser tratados de una forma
homognea:
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
Ejemplo:
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
tipo[] nombre;
Ejemplo
int[] numeros;
char[] caracteres;
float[] notas;
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
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:
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
:int[]
numeros
0 1 2 3 4 5 6 7
new tipo[expresion];
donde:
tipo: especifica el tipo de los valores que almacenar el array
expresion: especifica el nmero de elementos del array (longitud)
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.
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).
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.
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
: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.
Podemos recorrer un array accediendo a todos sus elementos usando un for mejorado para
mostrarlos por pantalla por ejemplo.
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
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).
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.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.
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:
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
limiteDerecha--;
}
}
System.out.println();
}
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.
Un mtodo puede devolver a travs de la sentencia return un array. El ejemplo anterior podra
modificarse de la siguiente manera:
Ejemplo
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:
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.
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
de la forma siguiente:
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.
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 Ejemplo()
{
numeros = new int[9];
inicializarNumeros();
}
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)
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
Tomemos la sentencia,
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.
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
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.
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)
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.
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)
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
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.
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:
Ejemplo
PROGRAMACION PAGINA 15 (DE 37)
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
return encontrado;
}
Ejemplo
PROGRAMACION PAGINA 16 (DE 37)
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
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() )
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.
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
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)
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
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)
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)
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.
0 1 2 n-1
0
1
2
m-1
tipo[][] nombre;
Ejemplo
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)
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
Podemos declarar e inicializar, en un solo paso , con una serie de valores un array de dos
dimensiones.
Ejemplo
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
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
Ejer. 5.16. La clase Curso contiene estudiantes y sus notas obtenidas en una serie de
asignaturas.
// Sentencias
}
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()
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
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)
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.
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:
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)
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.
Ejemplo
La interface de un mtodo proporciona todo lo que necesitamos para saber utilizar el mtodo.
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
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.
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
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.
Como cualquier otro objeto creamos un objeto de la clase String llamando al constructor de la
clase:
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.
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)
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.
5.7.4 CONCATENACION
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
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:
Para comparar el contenido de dos objetos String debemos utilizar el mtodo equals()
En general este mtodo permite comparar dos objetos cualesquiera (siempre que el
mtodo equals est sobrecargado en la clase a comparar), tambin objetos String.
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)
int compareTo(String s)
if (a.compareTo(b) == 0)
// Sentencias
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()
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).
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
StringBuilderdelete(int inicio, int final) borra los caracteres entre inicio y final 1
Ejemplo
int i = 0;
return resul.toString();
}
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
VERSION 1.1
UNIDAD 5: ARRAYS (19/01/2016 19:15)
Ejemplo
import java.util.StringTokenizer;
while (frase.hasMoreTokens())
{
unaPalabra = frase.nextToken();
System.out.println(unaPalabra);
}
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 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
parmetros que se
pasan en la llamada
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
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}
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 Control()
{
nivel = BAJO;
}
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).
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.
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)
cada enumerado define un mtodo pblico esttico values() que devuelve un array
cuyos elementos contienen los valores del tipo
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