domingo, 18 de agosto de 2013

Un ejemplo en Java: Arrays, Propagación de Excepciones, Burbuja, compareTo


Persona.java
  1 /*
  2  * To change this template, choose Tools | Templates
  3  * and open the template in the editor.
  4  */
  5 
  6 package entidades;
  7 
  8 import java.util.Calendar;
  9 import java.util.GregorianCalendar;
 10 
 11 /**
 12  *
 13  * @author igor
 14  */
 15 public class Persona {
 16     private String nombre;
 17     private String domicilio;
 18     private String telefono;
 19     private String email;
 20     private GregorianCalendar fechaNacimiento;
 21 
 22     public Persona() {
 23         //lamando al contructor de alli abajo
 24         this("Undefined", "Undefined", "Undefined", "Undefined",
 25                 new GregorianCalendar(1800, 0, 1));
 26     }
 27 
 28     public Persona(String nombre, String domicilio, String telefono,
 29             String email, GregorianCalendar fechaNacimiento) {
 30         this.nombre = nombre;
 31         this.domicilio = domicilio;
 32         this.telefono = telefono;
 33         this.email = email;
 34         this.fechaNacimiento = fechaNacimiento;
 35     }
 36 
 37     public String getDomicilio() {
 38         return domicilio;
 39     }
 40 
 41     public void setDomicilio(String domicilio) {
 42         this.domicilio = domicilio;
 43     }
 44 
 45     public String getEmail() {
 46         return email;
 47     }
 48 
 49     public void setEmail(String email) {
 50         this.email = email;
 51     }
 52 
 53     public GregorianCalendar getFechaNacimiento() {
 54         return fechaNacimiento;
 55     }
 56 
 57     /*
 58      * se preguntaran porque? hay dos métodos con el mismo nombre, pues son
 59      * métodos sobrecargados en lo único que se diferencian es en el
 60      * número de parámetros que reciben.
 61      * el primero recibe un objeto de tipo GregorianCalendar, mientras
 62      * que el segundo recibe 3 parametros de tipo entero.
 63      * <Se puede hacer lo mismo de distintas maneras> :D
 64      */
 65     public void setFechaNacimiento(GregorianCalendar fechaNacimiento) {
 66         this.fechaNacimiento = fechaNacimiento;
 67     }
 68 
 69     public void setFechaNacimiento(int dia, int mes, int año){
 70         this.fechaNacimiento.set(año, mes - 1, dia);
 71     }
 72 
 73     public String getNombre() {
 74         return nombre;
 75     }
 76 
 77     public void setNombre(String nombre) {
 78         this.nombre = nombre;
 79     }
 80 
 81     public String getTelefono() {
 82         return telefono;
 83     }
 84 
 85     public void setTelefono(String telefono) {
 86         this.telefono = telefono;
 87     }
 88 
 89     public int getEdad(){
 90         GregorianCalendar fechaActual = new GregorianCalendar();
 91         int edad = fechaActual.get(Calendar.YEAR) - fechaNacimiento.get(
 92                  Calendar.YEAR);
 93          if(fechaActual.get(Calendar.MONTH) < fechaNacimiento.get(
 94                 Calendar.MONTH))
 95              edad = edad - 1;
 96         else if(fechaActual.get(Calendar.MONTH) == fechaNacimiento.get(
 97                 Calendar.MONTH)){
 98             if(fechaActual.get(Calendar.DAY_OF_MONTH) < fechaNacimiento.get(
 99                     Calendar.DAY_OF_MONTH))
100                edad = edad - 1;
101          }
102          return edad;
103      }
104 
105     @Override
106     public String toString() {
107         return "\nPersona{" + ""
108                 + "\nnombre=" + nombre + ""
109                 + "\ndomicilio=" + domicilio + ""
110                 + "\ntelefono=" + telefono + ""
111                 + "\nemail=" + email + ""
112                 + "\nfechaNacimiento=" + fechaNacimiento.get(
113                 Calendar.DAY_OF_MONTH) + '/'+ (fechaNacimiento.get(
114                 Calendar.MONTH)+1) + '/'+ fechaNacimiento.get(
115                 Calendar.YEAR)
116                 +"\nedad="+getEdad() + '}';
117     }
118 }
119 
120 
Lectura.java
 1 /*
 2  * To change this template, choose Tools | Templates
 3  * and open the template in the editor.
 4  */
 5 
 6 package datos;
 7 
 8 import java.io.BufferedReader;
 9 import java.io.IOException;
10 import java.io.InputStreamReader;
11 
12 /**
13  *
14  * @author igor
15  */
16 public class Lectura {
17     /*
18      * BufferedReader, un objeto de esta clase:
19      * Lee texto a partir de una secuencia de caracteres de entrada, 
20      * almacenando en un búfer de caracteres a fin proporcionar para la 
21      * lectura eficiente de caracteres, matrices, y líneas.
22      * 
23      * para inicializar un objeto de este tipo se invoca al contructor
24      * que recibe como parametro un objeto de tipo InputStreamReader el 
25      * cual tambien se inicializa llamando al constructor que recibe
26      * al objeto in que es de tipo InputStream.
27      */
28     private static BufferedReader candena = new BufferedReader(
29             new InputStreamReader(System.in));
30 
31     /*
32      * Creando un metodo para la lectura de caracteres desde el teclado
33      * añadir cláusula IOException para propagar la excepción
34      */
35 
36     public static String leer(String mensaje) throws IOException{
37         System.out.print(mensaje);
38         return candena.readLine();
39     }
40 }
41 
ListPersonas.java
  1 /*
  2  * To change this template, choose Tools | Templates
  3  * and open the template in the editor.
  4  */
  5 
  6 package datos;
  7 
  8 import entidades.Persona;
  9 
 10 /**
 11  *
 12  * @author igor
 13  */
 14 
 15 /*
 16  * Esta es una clase que se encargará de crear objetos que van a representar
 17  * a listas de personas, todas las personas que se ingresen a esta lista
 18  * se almacenarán en memoria volatil :\.
 19  *
 20  * La lista tiene un tamaño predefinido de 10, solo puede almacenar 10
 21  * personas, si en el caso se ingrese una más, la lista incrementará su tamaño
 22  * en 10 posiciones más.
 23  */
 24 public class ListPersonas {
 25     public static int tamaño = 10;
 26     public static int i = -1;
 27     /*
 28      * Las clases en java tambien son tipos de datos esto nos ayuda para
 29      * poder declarar arreglos que almacenan referencias a objetos.
 30      * (arreglo que almacena objetos del tipo de dato con el que declaró
 31      */
 32     public Persona lista[];
 33 
 34     /**
 35      * Constructor:
 36      * inicializa el arreglo que contendrá a las referencias de tipo
 37      * persona
 38      */
 39     public ListPersonas(){
 40         lista = new Persona[tamaño];
 41     }
 42 
 43     /**
 44      * addPersona(Persona persona)
 45      * recibe a la persona que va almacenar
 46      */
 47     public void addPersona(Persona persona){
 48         //verificar si el indice de la lista ha llegado a la última posición
 49         //si llego llamar al metodo expandir
 50         if(i + 1 == lista.length){
 51             expandir();
 52         }
 53         //si es que no se llega a cumplir la condición el elemento se agrega
 54         lista[++i] = persona;
 55     }
 56 
 57     /**
 58      * expandir()
 59      * método interno declarado privado solo para lista es el encargado
 60      * se agregar 10 espacios adicionales.
 61      */
 62     private void expandir(){
 63         //crear una lista auxiliar con el tamaño original de la lista
 64         //original y adicionar 10 espacios más
 65         Persona[] listaAux = new Persona[lista.length+10];
 66         //proceso de copiar los elementos de la lista original a la lista
 67         //auxiliar
 68         for(int j = 0; j<=i; j++){
 69             listaAux[j] = lista[j];
 70         }
 71         //ahora la lista original apunta a la dirección de memoria de listaAux
 72         //lista ya tiene 10 espacios mas listos para recibir mas personas!
 73         lista = listaAux;
 74     }
 75     
 76     public String listar(){
 77         String cadena = "";
 78         for(int j=0; j<=i; j++)
 79             cadena += "\n["+j+"]: " +lista[j].toString();
 80         return cadena;
 81     }
 82 
 83     /**
 84      * burbuja()
 85      * método que utiliza el algoritmo de ordenación de la burbuja
 86      * @return
 87      */
 88     private void burbuja(int criterio){
 89         for(int j = 0; j < i; j++){
 90             for(int k = j+1; k <= i; k++){               
 91                     if(criterio == 1){
 92                          if(lista[k].getNombre().compareTo(
 93                                  lista[j].getNombre()) < 0){
 94                             Persona personaAux = lista[k];
 95                             lista[k] = lista[j];
 96                             lista[j] = personaAux;
 97                          }
 98                     }
 99                     if(criterio == 2){
100                         if(lista[k].getEdad() < lista[j].getEdad()){
101                             Persona personaAux = lista[k];
102                             lista[k] = lista[j];
103                             lista[j] = personaAux;
104                          }                     
105                     }
106             }
107         }
108     }
109 
110     /**
111      * listarPersonas(int order)
112      * order = 0, retorna todos los elementos listados en el orden que se
113      * agregaron.
114      * orden = 1, retorna todos los elementos listados ordenados
115      * ascendentemente por el nombre;
116      * @param orden
117      * @return un String con los elmentos listados según el criterio de orden
118      */
119     public String listarPesonas(int opcion){
120         String cadena = "";
121         switch(opcion){
122             case 0:
123                 cadena = listar();
124                 break;
125             case 1:
126                 burbuja(1);
127                 cadena = listar();
128                 break;
129             case 2:
130                 burbuja(2);
131                 cadena = listar();
132                 break;
133             default:
134                 cadena = "Opción incorrecta";
135                 break;
136 
137         }
138         return cadena;
139     }
140 }
141 
142 
PruebaListPersonas.java
 1 /*
 2  * To change this template, choose Tools | Templates
 3  * and open the template in the editor.
 4  */
 5 
 6 package pruebas;
 7 
 8 import datos.Lectura;
 9 import datos.ListPersonas;
10 import entidades.Persona;
11 import java.io.IOException;
12 import java.util.GregorianCalendar;
13 
14 /**
15  *
16  * @author iAlexander
17  */
18 public class PruebaListPersonas {
19     /*
20      * Método estatico para el menu de opciones
21      */
22     public static int menu() throws IOException{
23         int opcion = 0;
24         String menu = "\nMENU:"
25                 + "\n1. Agregar una persona"
26                 + "\n2. Listar Personas"
27                 + "\n3. Ordenar por nombre"
28                 + "\n4. Ordenar por edad"
29                 + "\n5. Salir"
30                 + "\nDigite Opcion: ";
31         opcion = Integer.parseInt(Lectura.leer(menu));
32         return opcion;
33     }
34 
35     /*
36      * Método main
37      */
38     public static void main(String[] args) throws IOException {
39         int opcion = 0;
40         int dia, mes, año;
41         String nombre, domicilio, telefono, eMail;
42         Persona persona;
43         ListPersonas lista = new ListPersonas();
44         /*
45          * Utilizar un do-while asegura que el bloque de código que
46          * está dentro se ejecute al menos una vez.
47          */
48         do{
49             opcion = menu();
50             switch(opcion){
51                 case 1:
52                     nombre = Lectura.leer("Nombre: ");
53                     domicilio = Lectura.leer("Domicilio: ");
54                     telefono = Lectura.leer("Telefono: ");
55                     eMail = Lectura.leer("Email: ");
56                     dia = Integer.parseInt(Lectura.leer(
57                             "FechaNacimiento(DD): "));
58                     mes = Integer.parseInt(Lectura.leer(
59                             "FechaNacimiento(MM): "));
60                     año = Integer.parseInt(Lectura.leer(
61                             "FechaNacimiento(AA): "));
62                     persona = new Persona(nombre, domicilio, telefono,
63                             eMail, new GregorianCalendar(año, mes-1, dia));
64                     lista.addPersona(persona);
65                     break;
66                 case 2:
67                     System.out.println(lista.listarPesonas(0));
68                     break;
69                 case 3:
70                     System.out.println(lista.listarPesonas(1));
71                     break;
72                 case 4:
73                     System.out.println(lista.listarPesonas(2));
74                     break;
75             }
76         }while(opcion > 0 && opcion < 5);
77     }
78 }
79 
80 



run:

MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 1
Nombre: Rosa
Domicilio: San Rafael
Telefono: 561992
Email: rouse_22@hotmail.com
FechaNacimiento(DD): 5
FechaNacimiento(MM): 6
FechaNacimiento(AA): 1990

MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 1
Nombre: Igor
Domicilio: Trujillo 543
Telefono: 569984
Email: ialexander21@hotmail.com
FechaNacimiento(DD): 4
FechaNacimiento(MM): 12
FechaNacimiento(AA): 1990

MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 1
Nombre: Jenny
Domicilio: Guadalupe 257
Telefono: 4556377
Email: jenn_4@live.com
FechaNacimiento(DD): 9
FechaNacimiento(MM): 7
FechaNacimiento(AA): 1993

MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 2

[0]:
Persona{
nombre=Rosa
domicilio=San Rafael
telefono=561992
email=rouse_22@hotmail.com
fechaNacimiento=5/6/1990
edad=23}
[1]:
Persona{
nombre=Igor
domicilio=Trujillo 543
telefono=569984
email=ialexander21@hotmail.com
fechaNacimiento=4/12/1990
edad=22}
[2]:
Persona{
nombre=Jenny
domicilio=Guadalupe 257
telefono=4556377
email=jenn_4@live.com
fechaNacimiento=9/7/1993
edad=20}

MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 3

[0]:
Persona{
nombre=Igor
domicilio=Trujillo 543
telefono=569984
email=ialexander21@hotmail.com
fechaNacimiento=4/12/1990
edad=22}
[1]:
Persona{
nombre=Jenny
domicilio=Guadalupe 257
telefono=4556377
email=jenn_4@live.com
fechaNacimiento=9/7/1993
edad=20}
[2]:
Persona{
nombre=Rosa
domicilio=San Rafael
telefono=561992
email=rouse_22@hotmail.com
fechaNacimiento=5/6/1990
edad=23}

MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 4

[0]:
Persona{
nombre=Jenny
domicilio=Guadalupe 257
telefono=4556377
email=jenn_4@live.com
fechaNacimiento=9/7/1993
edad=20}
[1]:
Persona{
nombre=Igor
domicilio=Trujillo 543
telefono=569984
email=ialexander21@hotmail.com
fechaNacimiento=4/12/1990
edad=22}
[2]:
Persona{
nombre=Rosa
domicilio=San Rafael
telefono=561992
email=rouse_22@hotmail.com
fechaNacimiento=5/6/1990
edad=23}

MENU:
1. Agregar una persona
2. Listar Personas
3. Ordenar por nombre
4. Ordenar por edad
5. Salir
Digite Opcion: 5
GENERACIÓN CORRECTA (total time: 3 minutes 46 seconds)

Descargate este archivo: iGorBlog3

No hay comentarios:

Publicar un comentario