Académique Documents
Professionnel Documents
Culture Documents
[9] Salir.
Implemente las clases y los mtodos necesarios que den solucin a la
Aplicacin
Crear un mtodo que valide si el arreglo se objetos est lleno, entonces
mostrar un mensaje correspondiente.
case 3:
String ConBuscar;
String ELIMINAR="";
System.out.print("Ingrese Titulo del libro a buscar:");
ConBuscar=Teclado.readLine();
int I;
LIBRO AUX[]=ne w LIBRO[10];
boolean SW=false;
for(I=0;I<POS;I++){
if(ConBuscar.equalsIgnoreCase(BIBLIOTECA[I].getTITULO())==t
rue){
System.out.print("El libro existe...desea eliminarlo S/N?");
ELIMINAR=Teclado.readLine();
if(ELIMINAR.equalsIgnoreCase("S")==true){
for(int X=0;X<POS;X++)
if(X!=I) AUX[X]=BIBLIOTECA[I];
BIBLIOTECA=AUX;
POS--;
}
}
}
if(SW==false) System.out.print("El libro no existe...!!!");
break;
case 4:
System.out.println("ORDENAMIENTO POR TITULO");
LIBRO AUXI[]=ne w LIBRO[1];
int X,Y;
for(X=0;X<POS;X++)
for(Y=X+1;Y<POS;Y++)
if(BIBLIOTECA[X].getTITULO().compa re To(BIBLIOTECA[Y ].getTI
TULO())>0){
System.out.print("si ingresa");
AUXI[0]=BIBLIOTECA[X];
BIBLIOTECA[X]=BIBLIOTECA[Y ];
BIBLIOTECA[Y ]= AUXI[0];
}
break;
case 5:
String CodigoBuscar;
System.out.print("Ingrese codigo del libro a buscar:");
CodigoBuscar=Teclado.readLine();
boolean SW1=false;
for(I=0;I<POS;I++){
if(CodigoBuscar.equalsIgnoreCase(BIBLIOTECA[I].getCODIGO())
==true){
System.out.println("EL LIBRO EXISTE!!!!");
System.out.println("Ingrese datos del libro a modificar");
System.out.print("Ingrese titulo del libro:");
TITULO=Teclado.readLine();
System.out.print("Ingrese autor del libro:");
AUTOR=Teclado.readLine();
System.out.print("Ingrese editorial del libro:");
EDITORIAL=Teclado.readLine();
System.out.print("Ingrese ao de edicion del libro:");
AOEDIC ION=Teclado.readLine();
System.out.print("Ingrese especialidad del libro:");
ESPECIALIDAD=Teclado.readLine();
System.out.print("Ingrese numero de paginas del libro:");
NUMPAG=Teclado.readLine();
BIBLIOTECA[I].setTITULO(TITULO);
BIBLIOTECA[I].setAUTOR(AUTOR);
BIBLIOTECA[I].setAOEDIC ION(AOEDIC ION);
BIBLIOTECA[I].setEDITORIAL(EDITORIAL);
BIBLIOTECA[I].setESPEC IALIDAD(ESPEC IALIDAD);
BIBLIOTECA[I].setNUMPAG(NUMPAG);
SW1=true;
break;
}
}
if(SW1==false) System.out.print("El libro no existe...!!!");
break;
case 6:
String CodigoEditorial;
System.out.print("Ingrese editorial del libro a buscar:");
CodigoEditorial=Teclado.readLine();
boolean SW2=false;
System.out.println("CODIGO\t\tTITULO\t\tAUTOR\t\tEDITORIAL\t\
tAO EDICION\t\tESPEC IALIDAD\t\tNUM. PAG.");
for(I=0;I<POS;I++){
if(CodigoEditorial.equa lsIgnoreCase(BIBLIOTECA[I].getEDITORIA
L())==true){
System.out.print( BIBLIOTECA[I]. IMPRIMIR());
SW2=true;
}
}
if(SW2==false) System.out.print("No existen libros de esa
editorial...!!!");
break;
case 7:
String Ao;
System.out.print("Ingrese ao de edicion del libro a buscar:");
Ao=Teclado.readLine();
boolean SW4=false;
System.out.println("CODIGO\t\tTITULO\t\tAUTOR\t\tEDITORIAL\t\
tAO EDICION\t\tESPEC IALIDAD\t\tNUM. PAG.");
for(I=0;I<POS;I++){
if(BIBLIOTECA[I].getAOEDIC ION().compa re To(Ao)>0){
System.out.print( BIBLIOTECA[I]. IMPRIMIR());
SW4=true;
}
}
if(SW4==false) System.out.print("No existen libros en ese ao de
edicion...!!!");
break;
case 8:
String Especialidad;
System.out.print("Ingrese especilidad del libro a buscar:");
Especialidad=Teclado.readLine();
boolean SW3=false;
System.out.println("CODIGO\t\tTITULO\t\tAUTOR\t\tEDITORIAL\t\
tAO EDICION\t\tESPEC IALIDAD\t\tNUM. PAG.");
for(I=0;I<POS;I++){
if(Especialidad.equalsIgnoreCase(BIBLIOTECA[I].getESPEC IALID
AD())==true){
System.out.print( BIBLIOTECA[I]. IMPRIMIR());
SW3=true;
}
}
if(SW3==false) System.out.print("No existen libros de esa
espacialidad...!!!");
break;
}
}
while (opcion!=9);
}
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
boolean SW=false;
CODIGO=JOptionPane.showInputDialog(null,"Ingrese codigo del alumno a modificar:");
for(X=0; X<POS; X++)
if(CODIGO.equals IgnoreCase(SA LON[ X].get Codigo())==true){
SW=true;
Tabla.removeRow(X);
jTable1.setModel(Tabla);
break;
}
if(SW==false)
JOptionPane.showMessageDialog(null,"No existe el codigo del alumno...");
}
private void btnCerrarActionPerformed(java.awt.event.ActionE vent evt)
{
System.exit(0);
}
private void jComboBox1ItemStateChanged(java. awt.event.ItemE vent evt )
{
jComboBox2.removeAllItems();
if(jComboBox1.getSelectedItem().toString().equalsIgnoreCase("CIE NCIAS DE LA
SALUD")==true){
jComboBox2.addItem("Medicina Humana");
jComboBox2.addItem("Obstetricia");
jComboBox2.addItem("Enfermeria" );
jComboBox2.addItem(" Nutricion");
jComboBox2.addItem("Farmacia y BioQuimica");
jComboBox2.addItem("Psicologia");
}
if(jComboBox1.getSelectedItem().toString().equals IgnoreCase(" HUMA NIDA DES")==true
){
jComboBox2.addItem("Literatura");
jComboBox2.addItem("Filosofia");
jComboBox2.addItem("Educacion Inicial");
}
if(jComboBox1.getSelectedItem().toString().equals IgnoreCase(" CIE NCIAS
SOCIALES")==true){
jComboBox2.addItem("Derecho");
jComboBox2.addItem("Ciencia Politica");
jComboBox2.addItem("Trabajo Social");
}
if(jComboBox1.getSelectedItem().toString().equalsIgnoreCase("CIE NCIAS
BASICAS")==true){
jComboBox2.addItem("Quimica");
jComboBox2.addItem("Fisica");
jComboBox2.addItem("Matematica");
}
if(jComboBox1.getSelectedItem().toString().equalsIgnoreCase("INGE NIE RIAS")==true){
jComboBox2.addItem("Ingenieria Quimica");
jComboBox2.addItem("Ingenieria de Minas");
jComboBox2.addItem("Ingenieria de Sistemas");
}
}
Clase CuentaAhorros
import javax.swing.JOptionPane;
public CuentaInversion(){
this.Saldo=25000;
}
public void setRetiro(double Cantidad) {
if(Cantidad>Saldo){
System.out.println("No puede retirar mas de lo que tiene...!!!");
}
else
{
if (Cantidad==Saldo)
{
System.out.println("Va a retirar todo su dinero...!!!");
this.Saldo = Saldo-Cantidad;
}
else
{
if(Cantidad<=0)
System.out.println("Ingrese cantidad mayor a 0");
else
{
this.Saldo = Saldo-Cantidad;
if(Saldo<=10000)
{
System.out.println("Saldo minimo en ahorros es de 500...!!!");
this.Saldo = Saldo+Cantidad;
}
}
}
}
}
}
Clase principal para manipular las clases.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class APLICACIONJAVABANCO {
int POS=0;
static CuentaAhorros CA=new CuentaAhorros();
static CuentaInversion CI=new CuentaInversion();
public static void main(String[] args) throws IOException {
double DEPOSITO,RETIRO;
BufferedReader Teclado=new BufferedReader(new
InputStreamReader(System.in));
int OPCION1=0,OPCION2=0,OPCION3=0;
do{
System.out.println("****************************************
**************");
System.out.println("MENU PRINCIPAL");
System.out.println("[0] INGRESE DATOS DEL CLIENTE");
System.out.println("[1] SELECCIONE TIPO CUENTA");
System.out.println("[2] MOSTRAR SALDO CUENTA DE AHORRO");
System.out.println("[3] MOSTRAR SALDO CUENTA DE INVERSION");
System.out.println("[4] SALIR");
System.out.println("****************************************
**************");
System.out.print("Ingresar opcion <1 - 4 >:");
OPCION1=Integer.parseInt(Teclado.readLine());
switch(OPCION1){
case 0:
String NUMCUENTAS,NOMBRES;
System.out.println("\nINGRESE DATOS DEL CLIENTE");
System.out.print("Ingrese numero de cuenta:");
NUMCUENTAS=Teclado.readLine();
System.out.print("Ingrese nombre del cliente:");
NOMBRES=Teclado.readLine();
CA.setNOMBRE(NOMBRES);
CA.setNUMCUENTA(NUMCUENTAS);
CI.setNOMBRE(NOMBRES);
CI.setNUMCUENTA(NUMCUENTAS);
break;
case 1:
System.out.println("\nTIPOS DE CUENTAS");
System.out.println("[3] CUENTA DE AHORRO");
System.out.println("[4] CUENTA DE INVERSION");
System.out.print("Ingresar tipo de cuenta <3 - 5 >:");
OPCION2=Integer.parseInt(Teclado.readLine());
if(OPCION2==3)
{
System.out.println("TIPOS DE OPERACION");
System.out.println("[5] DEPOSITO");
System.out.println("[6] RETIRO");
System.out.print("Ingresar tipo de cuenta <5 - 6 >:");
OPCION3=Integer.parseInt(Teclado.readLine());
if(OPCION3==5){
System.out.print("Ingresar cantidad a depositar:");
DEPOSITO=Integer.parseInt(Teclado.readLine());
CA.setDeposito(DEPOSITO);
}
if(OPCION3==6){
System.out.print("Ingresar cantidad a retirar:");
RETIRO=Integer.parseInt(Teclado.readLine());
CA.setRetiro(RETIRO);
}
}
if(OPCION2==4)
{
System.out.println("TIPOS DE OPERACION");
System.out.println("[8] RETIRO");
System.out.print("Ingresar tipo de cuenta <8 - 8>:");
OPCION3=Integer.parseInt(Teclado.readLine());
System.out.print("Ingresar cantidad a retirar:");
RETIRO=Integer.parseInt(Teclado.readLine());
CI.setRetiro(RETIRO);
}
break;
case 2:
System.out.println("TOTAL DE SALDO EN SU CUENTA DE
AHORRO");
System.out.println("NUMERO DE CUENTA=" +
CA.getNUMCUENTA());
System.out.println("NOMBRE=" + CA.getNOMBRE());
System.out.println("SALDO="+CA.getSaldo());
break;
case 3:
System.out.println("TOTAL DE SALDO EN SU CUENTA DE
INVERSION");
System.out.println("NUMERO DE CUENTA=" +
CI.getNUMCUENTA());
System.out.println("NOMBRE=" + CI.getNOMBRE());
System.out.println("SALDO=" +CI.getSaldo());
break;
}
}
while(OPCION1!=4);
}
}
Publicado por Krlos K en 4:41 No hay comentarios:
Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con
FacebookCompartir en Pinterest
Arrays de Objetos Java - Netbeans 7.4
[9] Salir.
Implemente las clases y los mtodos necesarios que den solucin a la
Aplicacin
Crear un mtodo que valide si el arreglo se objetos est lleno, entonces
mostrar un mensaje correspondiente.
case 3:
String ConBuscar;
String ELIMINAR="";
System.out.print("Ingrese Titulo del libro a buscar:");
ConBuscar=Teclado.readLine();
int I;
LIBRO AUX[]=ne w LIBRO[10];
boolean SW=false;
for(I=0;I<POS;I++){
if(ConBuscar.equalsIgnoreCase(BIBLIOTECA[I].getTITULO())==t
rue){
System.out.print("El libro existe...desea eliminarlo S/N?");
ELIMINAR=Teclado.readLine();
if(ELIMINAR.equalsIgnoreCase("S")==true){
for(int X=0;X<POS;X++)
if(X!=I) AUX[X]=BIBLIOTECA[I];
BIBLIOTECA=AUX;
POS--;
}
}
}
if(SW==false) System.out.print("El libro no existe...!!!");
break;
case 4:
System.out.println("ORDENAMIENTO POR TITULO");
LIBRO AUXI[]=ne w LIBRO[1];
int X,Y;
for(X=0;X<POS;X++)
for(Y=X+1;Y<POS;Y++)
if(BIBLIOTECA[X].getTITULO().compa re To(BIBLIOTECA[Y ].getTI
TULO())>0){
System.out.print("si ingresa");
AUXI[0]=BIBLIOTECA[X];
BIBLIOTECA[X]=BIBLIOTECA[Y ];
BIBLIOTECA[Y ]= AUXI[0];
}
break;
case 5:
String CodigoBuscar;
System.out.print("Ingrese codigo del libro a buscar:");
CodigoBuscar=Teclado.readLine();
boolean SW1=false;
for(I=0;I<POS;I++){
if(CodigoBuscar.equalsIgnoreCase(BIBLIOTECA[I].getCODIGO())
==true){
System.out.println("EL LIBRO EXISTE!!!!");
System.out.println("Ingrese datos del libro a modificar");
System.out.print("Ingrese titulo del libro:");
TITULO=Teclado.readLine();
System.out.print("Ingrese autor del libro:");
AUTOR=Teclado.readLine();
System.out.print("Ingrese editorial del libro:");
EDITORIAL=Teclado.readLine();
System.out.print("Ingrese ao de edicion del libro:");
AOEDIC ION=Teclado.readLine();
System.out.print("Ingrese especialidad del libro:");
ESPECIALIDAD=Teclado.readLine();
System.out.print("Ingrese numero de paginas del libro:");
NUMPAG=Teclado.readLine();
BIBLIOTECA[I].setTITULO(TITULO);
BIBLIOTECA[I].setAUTOR(AUTOR);
BIBLIOTECA[I].setAOEDIC ION(AOEDIC ION);
BIBLIOTECA[I].setEDITORIAL(EDITORIAL);
BIBLIOTECA[I].setESPEC IALIDAD(ESPEC IALIDAD);
BIBLIOTECA[I].setNUMPAG(NUMPAG);
SW1=true;
break;
}
}
if(SW1==false) System.out.print("El libro no existe...!!!");
break;
case 6:
String CodigoEditorial;
System.out.print("Ingrese editorial del libro a buscar:");
CodigoEditorial=Teclado.readLine();
boolean SW2=false;
System.out.println("CODIGO\t\tTITULO\t\tAUTOR\t\tEDITORIAL\t\
tAO EDICION\t\tESPEC IALIDAD\t\tNUM. PAG.");
for(I=0;I<POS;I++){
if(CodigoEditorial.equa lsIgnoreCase(BIBLIOTECA[I].getEDITORIA
L())==true){
System.out.print( BIBLIOTECA[I]. IMPRIMIR());
SW2=true;
}
}
if(SW2==false) System.out.print("No existen libros de esa
editorial...!!!");
break;
case 7:
String Ao;
System.out.print("Ingrese ao de edicion del libro a buscar:");
Ao=Teclado.readLine();
boolean SW4=false;
System.out.println("CODIGO\t\tTITULO\t\tAUTOR\t\tEDITORIAL\t\
tAO EDICION\t\tESPEC IALIDAD\t\tNUM. PAG.");
for(I=0;I<POS;I++){
if(BIBLIOTECA[I].getAOEDIC ION().compa re To(Ao)>0){
System.out.print( BIBLIOTECA[I]. IMPRIMIR());
SW4=true;
}
}
if(SW4==false) System.out.print("No existen libros en ese ao de
edicion...!!!");
break;
case 8:
String Especialidad;
System.out.print("Ingrese especilidad del libro a buscar:");
Especialidad=Teclado.readLine();
boolean SW3=false;
System.out.println("CODIGO\t\tTITULO\t\tAUTOR\t\tEDITORIAL\t\
tAO EDICION\t\tESPEC IALIDAD\t\tNUM. PAG.");
for(I=0;I<POS;I++){
if(Especialidad.equalsIgnoreCase(BIBLIOTECA[I].getESPEC IALID
AD())==true){
System.out.print( BIBLIOTECA[I]. IMPRIMIR());
SW3=true;
}
}
if(SW3==false) System.out.print("No existen libros de esa
espacialidad...!!!");
break;
}
}
while (opcion!=9);
}
}
Ordenar un ArrayList en Java
En este post vamos a mostrar como ordenar ArrayList, bien sea con un
ArrayList de datos atmicos o con un ArrayList de objetos.
arrayListInt.add(3); arrayListInt.add(4);
arrayListInt.add(2); arrayListInt.add(6);
arrayListInt.add(5); arrayListInt.add(1);
arrayListInt.add(7);
Posicion(1) = 1
Posicion(2) = 2
Posicion(3) = 3
Posicion(4) = 4
Posicion(5) = 5
Posicion(6) = 6
Posicion(7) = 7
Collections.sort(arrayListInt, comparador);
Posicion(1) = 7
Posicion(2) = 6
Posicion(3) = 5
Posicion(4) = 4
Posicion(5) = 3
Posicion(6) = 2
Posicion(7) = 1
Pero Que pasa si lo que tenemos es un ArrayList de objetos de una
determinada clase y lo que queremos ordenar ese ArrayList por el valor de un
determinado atributo?. Bueno pues hay una sencilla solucin que vamos a mostrar
a continuacin y que consiste en sobreescribir un mtodo de la clase Comparator.
Supongamos que tenemos una clase "Persona" de la siguiente forma:
class Persona {
public Persona() {
this.nombre = nombre;
this.edad = edad;
return nombre;
this.nombre = nombre;
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
@Override
................
................
});
Posicion(1) = Lola - 20
Posicion(2) = Dani - 24
Posicion(3) = Susi - 24
Posicion(4) = Pepe - 28
Posicion(5) = Jose - 28
Posicion(6) = Juan - 32
Posicion(7) = Sara - 36
Posicion(8) = Paco - 40
@Override
}
});
Posicion(1) = Paco - 40
Posicion(2) = Sara - 36
Posicion(3) = Juan - 32
Posicion(4) = Pepe - 28
Posicion(5) = Jose - 28
Posicion(6) = Dani - 24
Posicion(7) = Susi - 24
Posicion(8) = Lola - 20
Esto es en resumen todo lo necesario para ordenar ArrayList, bien sean por
un atributo de una serie de objetos o con datos atmicos (en realidad son objetos
que representan datos atmicos, Integer, Double, etc.). No hemos entrado en
detalle de explicar las clases Comparator y Collections ya que en principio la
finalidad de este post es la de dar una solucin a la ordenacin de ArrayList.
// Array a ordenar:
int[] intArray = { 3, 2, 8, 5, 7, 9 };
Arrays.sort(intArray);
Indices: 0 1 2 3 4 5
Array: 3 2 8 5 7 9
Indices: 5 2 4 3 0 1
Array: 9 8 7 5 3 2
Bueno, tranquilos que no es el fin del mundo ;). Para los experimentos que
suelo hacer, necesito muchas veces obtener, dado un array, su array ordenado
junto con sus indices. He encontrado muchas soluciones por web como
StackOverflow, pero al final ninguna me convence y decidi hacer una API que
resuelva estos problemas para los arrays de enteros, floats, doubles y Strings.
Este API la he llamado SortArray y la podeis descargar en el enlace que os he
puesto arriba. El .jar se llama SortArray_1.0.jar. Con esta API podeis ordenar
arrays de los tipos de datos citados anteriormente y lo podeis hacer de mayor a
menor o de menor a mayor, pudiendo obtener los indices de los arrays tras la
ordenacin. A continuacin paso a poner ejemplos de la utilizacin del API que son
los mismo que podeis encontrar en el proyecto.
// Array a ordenar:
int[] intArray = { 3, 2, 8, 5, 7, 9 };
Indices: 0 1 2 3 4 5
Array: 3 2 8 5 7 9
Indices: 1 0 3 4 2 5
Array: 2 3 5 7 8 9
Indices: 0 1 2 3 4 5
Array: 3 2 8 5 7 9
...Array Ordenado decrecientemente con sus indices utilizando el API ...
Indices: 5 2 4 3 0 1
Array: 9 8 7 5 3 2
Indices: 0 1 2 3 4 5
Array: 3.3 2.2 8.8 5.5 7.7 9.9
Indices: 0 1 2 3 4 5
Array: 3.3 2.2 8.8 5.5 7.7 9.9
Indices: 5 2 4 3 0 1
Array: 9.9 8.8 7.7 5.5 3.3 2.2
Indices: 1 0 3 4 2 5
Indices: 0 1 2 3 4
Array: Espaa Francia Italia Alemania Holanda
Indices: 3 0 1 4 2
Array: Alemania Espaa Francia Holanda Italia
Indices: 0 1 2 3 4
Indices: 2 4 1 0 3
Array: Italia Holanda Francia Espaa Alemania
Una vez explicado el funcionamiento del API y que podeis descargar sin
problema, pasamos a explicar como hemos hecho los mtodos de ordenacin de
arrays e indices. Lo vamos a explicar para el caso de ordenar array de enteros,
pero cambiando el tipo de variables, se hara lo mismo con cualquier otro tipo de
datos.
Lo primero que hacemos es hacer una copia del array que queremos
ordenar, para poder posteriormente compararlos y obtener los indices ordenados
del array. La copia de arrays se hace de la siguiente forma:
Una vez que se ha hecho la copia del array, ordenamos el primer array de
menor a mayor con el mtodo Sort de la clase Arrays, tal y como mostramos al
inicio del tutorial:
Arrays.sort(intArray);
int i = 0;
int j = array.length - 1;
int tmp;
while (j > i) {
tmp = array[j];
array[j] = array[i];
array[i] = tmp;
j--;
i++;
return array;
}
Este mtodo solo se utilizara si queremos ordenar el array de mayor a
menor.
Ahora solo queda ver los indices de los array, por eso hemos hecho una
copia del array original, para compararlos y obtener sus indices. El siguiente
mtodo obtiene el orden de los indices pasndole como parmetros al array
desordenado y el ordenado:
Arrays.fill(index, 0);
Arrays.fill(esta, false);
int in = 0;
esta[in] = true;
index[i] = in;
stay = true;
} else {
in++;
return index;
}
Antes de todo, decir que el cdigo de todos los ejemplos que se ponen a
continuacin los podeis descargar pulsando AQUI.
Los principales mtodos para trabajar con los ArrayList son los siguientes:
nombreArrayList.add("Elemento");
nombreArrayList.size();
nombreArrayList.contains("Elemento");
nombreArrayList.indexOf("Elemento");
nombreArrayList.lastIndexOf("Elemento");
nombreArrayList.remove(5);
nombreArrayList.remove("Elemento");
nombreArrayList.clear();
nombreArrayList.isEmpty();
// Copiar un ArrayList
Otra cosa muy importante a la hora de trabajar con los ArrayList son los
Iteradores (Iterator). Los Iteradores sirven para recorrer los ArrayList y poder
trabajar con ellos. Los Iteradores solo tienen tres mtodos que son
el hasNext() para comprobar que siguen quedando elementos en el iterador,
el next() para que nos de el siguiente elemento del iterador; y el remove() que
sirve para eliminar el elemento del Iterador.
nombreArrayList.add("Elemento "+i);
while(nombreIterator.hasNext()){
System.out.print(elemento+" / ");
nombreArrayList.remove(0);
nombreIterator = nombreArrayList.iterator();
while(nombreIterator.hasNext()){
if(elemento.equals("Elemento 3"))
nombreIterator = nombreArrayList.iterator();
while(nombreIterator.hasNext()){
System.out.print(elemento+" / ");
}
numElementos = nombreArrayList.size();
... Eliminamos los elementos de ArrayList que sean iguales a "Elemento 3" ...
Bueno todo lo que hemos visto esta muy bien, pero por lo general los
ArrayList se suelen utilizar con objetos ms que con estructuras atmicas de datos,
ya que los ArrayList en Java son estructuras muy potentes y sencillas de manejar.
package ArrayList_Objetos;
public class PartidoFutbol {
return equipoLocal;
this.equipoLocal = equipoLocal;
return equipoVisitante;
this.equipoVisitante = equipoVisitante;
return golesLocal;
return golesVisitante;
this.golesVisitante = golesVisitante;
Scanner s = null;
try {
// Leemos el contenido del fichero
s = new Scanner(fichero);
while (s.hasNextLine()){
partido.setEquipoLocal(cortarString[0]);
partido.setEquipoVisitante(cortarString[1]);
partido.setGolesLocal(Integer.parseInt(cortarString[2]));
partido.setGolesVisitante(Integer.parseInt(cortarString[3]))
;
partidos.add(partido);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if (s != null)
s.close();
e2.printStackTrace();
}
Con este cdigo que mostramos tambien se puede ver de que forma se
puede leer un fichero de texto y tratar los datos . Una vez ejecutado este
cdigo tenemos guardado en el ArrayList partidos, 50 partidos de ftbol. Ahora
recorremos el ArrayList con un Iterator y mostramos por pantalla todos los
resultados de ftbol. Esto lo hacemos igual que antes, con el Iterator:
while(itrPartidos.hasNext()){
+ partido.getGolesLocal() + "-"
+ partido.getEquipoVisitante());
.
.
Ahora vamos a eliminar del ArrayList, todos los partidos que no tengan
como resultado un empate. De esta forma trabajaremos de nuevo con el iterator.
Esto lo hacemos de la siguiente forma:
// no sea un empate
itrPartidos = partidos.iterator();
while(itrPartidos.hasNext()){
if(partido.getGolesLocal() != partido.getGolesVisitante())
itrPartidos.remove();
itrPartidos = partidos.iterator();
while(itrPartidos.hasNext()){
+ partido.getGolesLocal() + "-"
... Eliminamos los partidos de futbol cuyo resultado no sea un empate ...
Con esto ya hemos visto como manejar los ArrayList y hemos visto los
mtodos mas importantes para ello. Con todo esto ya esta casi todo contado sobre
los ArrayList en Java. Ahora solo queda coger soltura y trabajar con ello.
1 2 0 3 0 7
0 0 0 0
0 6 9 8 0 9 6
0 0 0 0 7 9 0 0
0 0 0 0 0
8 7 0 8 9 0 8
1 2 3 7
6 9 8 9 6
7 9
8 7 8 9 8
Es decir se eliminan todos los ceros y como las filas 2 y 5 contienen todo
ceros, se han de eliminar esas filas. Para ello nos tenemos que declarar un
ArrayList de ArrayList de enteros de la siguiente forma:
Lo siguiente que haremos sera leer los nmeros del fichero y nos
crearemos por cada fila un ArrayList de enteros en el que guardaremos cada
nmero en una posicin del ArrayList y luego guardaremos ese ArrayList en el
ArrayList que hemos llamado arrayListNumeros. Esto lo hacemos de la siguiente
forma:
try {
s = new Scanner(fichero);
while (s.hasNextLine()){
numeros.add(Integer.parseInt(cortarString[i]));
arrayListNumeros.add(numeros);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if (s != null)
s.close();
e2.printStackTrace();
}
}
Para comprobar que hemos copiado bien los datos y para recorrer el
ArrayList de ArrayList de Enteros, vamos a imprimir por pantalla el contenido del
ArrayList y lo hacemos de la siguiente forma:
// Para ver que hemos leido bien los numeros del fichero, recorremos el Array
List de
while(itrArrayListNumeros.hasNext()){
while(itrNumeros.hasNext()){
System.out.print(numero+" ");
System.out.println();
itrArrayListNumeros = arrayListNumeros.iterator();
while(itrArrayListNumeros.hasNext()){
if (numero == 0)
itrNumeros.remove();
Ahora borramos del ArrayList, los ArrayLit que estn vacos, preguntando
con el mtodo isEmpty(). Esto lo hacemos de la siguiente forma:
// contengan elementos
itrArrayListNumeros = arrayListNumeros.iterator();
while(itrArrayListNumeros.hasNext()){
if (numeros.isEmpty())
itrArrayListNumeros.remove();
Con todo esto ya hemos eliminado los ceros, y los ArrayList que estaban
vacos. Ahora solo queda recorrer de nuevo el ArrayList de ArrayList y mostrar el
contenido tras realizar las eliminaciones de ceros. Esto lo hacemos de la siguiente
manera:
itrArrayListNumeros = arrayListNumeros.iterator();
while(itrArrayListNumeros.hasNext()){
while(itrNumeros.hasNext()){
salida += "n";
System.out.println(salida);
Tras ejecutar este cdigo, vemos que tenemos la salida esperada, que es
la siguiente:
1 2 3 7
6 9 8 9 6
7 9
8 7 8 9 8
Con todo esto ya hemos visto prcticamente todo sobre los ArrayList, con
ejemplo de como tratarlos con elementos atmicos (String, int, float, double, ) y
con objetos y sobre todo ver como se trabaja con ArrayList de ArrayList que como
se ha visto la complejidad esta en saber recorrer esa estructura de datos.
Como se puede observar, vemos que en las tres clases tenemos atributos y
mtodos que son iguales ya que los tres tienen los atributos id, Nombre, Apellidos
y Edad; y los tres tienen los mtodos de Viajar y Concentrarse:
A nivel de cdigo tenemos lo siguiente tras ver el diagrama de clases:
{ { {
// constructor, // constructor,
getter y setter getter y setter
public void Con
centrarse() {
...
public void Via public void Viaj
jar() { } ar() {
... ...
...
public void jug public void darM
arPartido() { } asaje() {
... ...
... }
protected int i
d;
protected Strin
g Nombre;
protected Strin
g Apellidos;
protected int E
dad;
// constructor,
getter y setter
...
...
{ { {
// getter y set
// getter y set ter
ter // getter y sett
er
}
public void dir
public void ent igirEntreno() { }
renar() {
...
...
}
}
}
}
......
public SeleccionFutbol() {
this.id = id;
this.Nombre = nombre;
this.Apellidos = apellidos;
this.Edad = edad;
......
......
public Futbolista() {
super();
this.dorsal = dorsal;
this.demarcacion = demarcacion;
......
Hasta aqu todo correcto, pero ahora vamos a ver como trabajamos con
estas clases. Para ver este funcionamiento de forma clara y sencilla vamos a
trabajar con un objeto de cada clase y vamos a ver como se crean y de que forma
ejecutan sus mtodo. Para ello empecemos mostrando el siguiente fragmento de
cdigo:
integrantes.add(delBosque);
integrantes.add(iniesta);
integrantes.add(raulMartinez);
// CONCENTRACION
System.out.print(integrante.getNombre()+" "+integran
te.getApellidos()+" -> ");
integrante.Concentrarse();
}
// VIAJE
System.out.print(integrante.getNombre()+" "+integran
te.getApellidos()+" -> ");
integrante.Viajar();
......
Todos los integrantes viajan para jugar un partido. (Todos ejecutan el mismo
mtodo)
Vicente Del Bosque -> Viajar
// ENTRENAMIENTO
System.out.println("nEntrenamiento: Solamente el entrenador y el futbolista t
iene metodos para entrenar:" );
delBosque.dirigirEntrenamiento();
iniesta.entrenar();
// MASAJE
System.out.print(raulMartinez.getNombre()+" "+raulMartinez.getApellidos()+" -
> ");
raulMartinez.darMasaje();
// PARTIDO DE FUTBOL
delBosque.dirigirPartido();
iniesta.jugarPartido();
CONCLUSIONES Y ACLARACIONES:
Esto ha sido todo lo que hemos contado sobre la herencia en esta entrada.
El tema de la herencia es un tema que puede ser un poco ms complejo de lo que
lo hemos contado aqu, ya que solo hemos contado lo que es la herencia simple
(ya que Java por el momento es el nico tipo de herencia que soporta) y no la
herencia mltiple, que es un tipo de herencia en la que una clase hija puede tener
varios padres, aunque por el momento si estis empezando a aprender el
concepto de la herencia, con la herencia simple tenis ms que suficiente. Para los
que os estis iniciando en el mundo de la ingeniera informtica, habris podido ver
que hemos puesto unos ejemplo mostrando unos diagramas "un poco raros"; pues
bien, estos diagramas se llaman diagramas de clases (que los hemos realizado
con la herramienta web de www.genmymodel.com) y sirven para representar de
forma grfica los atributos y mtodos de las clases y las relaciones entre ellos,
utilizando el lenguaje UML del cual intentaremos hablar ms adelante en otros
tutoriales. Por ltimo decir y aclarar que en esta entrada quizs no hemos utilizado
una terminologa correcta para explicar la herencia, pero lo hemos explicadode una
forma algo distinta a como esta explicada por ahi para que los que empeceis
podais entender la herencia desde otro punto de vista.
Lo primero que nos debe de llamar la atencin al ver este cdigo es que
utilizamos dos veces la palabra reservada "abstract". Esta palabra nos indica
que la clase "SeleccionFutbol" es una clase abstracta y las clases abstractas
no se pueden instanciar, por tanto nunca podremos hacer un "new
SeleccionFutbol()". Otra cosa que vemos es que tambin utilizamos la palabra
reservada abstract en un mtodo (en el mtodo entrenamiento). Esto quiere
decir que todas las clases hijas de la clase "SeleccionFubol" tienen que tener
implementado ese mtodo obligatoriamente. Por tanto con esto que se acaba
de contar y diciendo que la palabra "Polimorfismo" significa "muchas formas",
podis deducir que la clase "SeleccionFutbol" es una clase que puede adoptar
diferentes formas y en este ejemplo puede adoptar las formas de "Futbolista",
"Entrenador" y "Masajista".
@Override
@Override
@Override
@Override
@Override
System.out.println("Da un Masaje");
integrantes.add(iniesta);
integrantes.add(raulMartinez);
// CONCENTRACION
integrante.concentrarse();
// VIAJE
integrante.viajar();
.........
Todos los integrantes viajan para jugar un partido. (Todos ejecutan el mismo
mtodo)
........
// ENTRENAMIENTO
integrante.entrenamiento();
// PARTIDO DE FUTBOL
integrante.partidoFutbol();
........
Vemos el resultado al ejecutar este fragmento de cdigo:
Por ltimo vamos a ver que cada uno de los objetos puede ejecutar
mtodos propios que solamente ellos los tienen como son el caso de
"planificarEntrenamiento(), entrevista() y darMasaje()" que solo los pueden
ejecutar objetos de la clase Entrenador, Futbolista y Masajista respectivamente:
........
// PLANIFICAR ENTRENAMIENTO
((Entrenador) delBosque).planificarEntrenamiento();
// ENTREVISTA
((Futbolista) iniesta).entrevista();
// MASAJE
((Masajista) raulMartinez).darMasaje();
........
CONCLUSIONES Y ACLARACIONES:
Como hemos visto el polimorfismo es un concepto un poco ms avanzado
que la herencia y puede ser muy util a la hora de jerarquizar y querer dar un patrn
de comportamiento comn a una serie de objetos que heredan de la misma clase.
En esta entrada no hemos visto todo lo referente al polimorfismo ya que nos
quedara ver un concepto un poco ms avanzado en Java (y en otros lenguajes
tambin) como son las "Interface" (clases abstractas puras) de las cuales
hablaremos en otra entrada para terminar de ver lo que es el polimorfismo.
Por ltimo es muy probable para los que estis empezando con la POO
que no veis mucho sentido a esto del polimorfismo y al principio es normal. Solo
os debo de decir que a base de experiencia se le encuentra sentido al
polimorfismo, por tanto si teneis que hacer alguna prctica en la universidad o lo
que sea en la que tengais que usar el polimorfismo intentar entenderlo y hacer lo
que os pidan porque entenderlo 100% es complicado y se requiere de experiencia
para ello.
Siguiendo con los ejemplos que hemos estado poniendo en las entradas de
la Herencia y el Polimorfismo, vamos a ver un ejemplo en el que simularemos el
comportamiento que tendran los diferentes integrantes de la seleccin espaola
de ftbol; tanto los Futbolistas como el cuerpo tcnico (Entrenadores, Masajistas,
etc). Para este ejemplo nos vamos a basar en el siguiente diagrama de clases:
void concentrarse();
void viajar();
void entrenar();
void jugarPartido();
public SeleccionFutbol() {
this.id = id;
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
}
// getter y setter
@Override
@Override
}
}
@Override
@Override
System.out.println("Planificar un Entrenamiento");
System.out.println("Da un Masaje");
integrantes.add(delBosque);
integrantes.add(iniesta);
integrantes.add(raulMartinez);
// CONCENTRACION
integrante.concentrarse();
// VIAJE
integrante.viajar();
// ENTRENAMIENTO
integrante.entrenar();
// PARTIDO DE FUTBOL
integrante.jugarPartido();
// PLANIFICAR ENTRENAMIENTO
((Entrenador) delBosque).planificarEntrenamiento();
// ENTREVISTA
((Futbolista) iniesta).entrevista();
// MASAJE
((Masajista) raulMartinez).darMasaje();
Todos los integrantes viajan para jugar un partido. (Todos ejecutan el mismo
mtodo)
Vicente Del Bosque -> Viajar (Clase Padre)
CONCLUSIONES Y ACLARACIONES:
Como hemos visto el concepto de la Interface va un paso ms alla en lo
referente al concepto de la clase abstracta. Es una muy buena prctica de diseo
la utilizacin de clases Interface para definir clases que tengan una misma forma,
aunque en ellas realicen comportamientos distintos.
Al igual que comentamos en las conclusiones de la entrada del
polimorfismo, es muy probable que los que empeceis con la POO no le veais
mucho sentido al tema de las clases Interface, as que no os preocupeis si eso es
asi porque estos conceptos se consolidan a base de experiencia y de ir
adquiriendo ms conocimientos de arquitectura y diseo del software.