1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / JAVA cómo comparar de dos maneras Interface Comparable metodo compareTo CU00913C
« en: 14 de Junio 2020, 04:15 »
Buen día a todos, sigo con la programacion de JAVA Avanzado. Dejo el siguiente código, propuesta de solución para el ejercicio CU00913C del tutorial de programación orientada a objetos. Tomo nota de sus comentarios.
Respecto al codigo, he aplicado lo que he aprendido en el basico y este.
He escrito el codigo en dos clases y lo he tratado de hacer los mas claro posible.
Saludos
Respecto al codigo, he aplicado lo que he aprendido en el basico y este.
He escrito el codigo en dos clases y lo he tratado de hacer los mas claro posible.
Saludos
Citar
EJERCICIO
Utilizando Comparable y compareTo resuelve el siguiente problema donde debemos partir de una clase Persona con atributos nombre, edad y altura. Queremos ordenar por edad y por altura a las siguientes personas:
1. Mario - Altura: 187 - Edad: 22
2. Pepe - Altura: 173 - Edad: 52
3. Manuel - Altura: 158 - Edad: 27
4. David - Altura: 164 - Edad: 25
5. Alberto - Altura: 184 - Edad: 80
Debemos comparar las personas y ordenarlas por altura primero (de mayor a menor) y por edad (de menor a mayor) después. Por pantalla debe mostrarse la lista de personas sin ordenar, ordenada por altura y ordenada por edad. Ejemplo de ejecución:
Personas sin ordenar
1. Mario - Altura: 187 - Edad: 22
2. Pepe - Altura: 173 - Edad: 52
3. Manuel - Altura: 158 - Edad: 27
4. David - Altura: 164 - Edad: 25
5. Alberto - Altura: 184 - Edad: 80
Personas ordenadas por altura
1. Mario - Altura: 187 - Edad: 22
2. Alberto - Altura: 184 - Edad: 80
3. Pepe - Altura: 173 - Edad: 52
4. David - Altura: 164 - Edad: 25
5. Manuel - Altura: 158 - Edad: 27
Personas ordenadas por edad
1. Mario - Altura: 187 - Edad: 22
2. David - Altura: 164 - Edad: 25
3. Manuel - Altura: 158 - Edad: 27
4. Pepe - Altura: 173 - Edad: 52
5. Alberto - Altura: 184 - Edad: 80
Código: [Seleccionar]
package ejerciciocompare;
public class Persona implements Comparable<Persona> {
private String nombre;
private float altura;
private int edad;
private int numero;
private static String opcion = "";
public Persona(String nombre, int altura, int edad) {
this.nombre = nombre;
this.altura = altura;
this.edad = edad;
this.numero = 0;
}
public Persona() {
this.nombre = "";
this.altura = 0;
this.edad = 0;
this.numero = 0;
}
@Override
public int compareTo(Persona temporal) {
int resultado = 0;
if (getOpcion().equals("ESTATURA")) {
if (this.getAltura() < temporal.getAltura()) {
resultado = 1;
} else if (this.getAltura() > temporal.getAltura()) {
resultado = -1;
}
} else if (getOpcion().equals("EDAD")) {
if (this.getEdad() < temporal.getEdad()) {
resultado = -1;
} else if (this.getEdad() > temporal.getEdad()) {
resultado = 1;
}
}
return resultado;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public float getAltura() {
return altura;
}
public void setAltura(float altura) {
this.altura = altura;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public String getOpcion() {
return opcion;
}
public void setOpcion(String opcion) {
this.opcion = opcion;
}
}
Código: [Seleccionar]
package ejerciciocompare;
import java.util.ArrayList;
import java.util.Iterator;
public class Principal {
private static Persona tmpPersona = new Persona();
private static Persona tmpPersona2 = new Persona();
private static ArrayList<Persona> listaPersonas = new ArrayList<Persona>();
private static Persona persona = new Persona();
public static void main(String[] args) {
Persona p1 = new Persona("Mario", 145, 22);
Persona p2 = new Persona("Pablo", 150, 52);
Persona p3 = new Persona("Manuel", 158, 27);
Persona p4 = new Persona("David", 164, 25);
Persona p5 = new Persona("Alberto", 177, 80);
Persona p6 = new Persona("Josefa", 187, 34);
listaPersonas.add(p1);
listaPersonas.add(p2);
listaPersonas.add(p3);
listaPersonas.add(p4);
listaPersonas.add(p5);
listaPersonas.add(p6);
System.out.println("Lista Original de Personas sin Ordenar: ");
mostrarDatos();
System.out.println("\nLista ordenada por EDAD");
ordenarPersonas("EDAD");
mostrarDatos();
System.out.println("\nLista Ordenada por ESTATURA");
ordenarPersonas("ESTATURA");
mostrarDatos();
}
public static void mostrarDatos() {
if (persona.getOpcion().equals("")) {
Iterator<Persona> it = listaPersonas.iterator();
int x = 0;
while (it.hasNext()) {
tmpPersona = it.next();
System.out.println((x + 1) + ". Nombre: " + tmpPersona.getNombre() + "\tEstatura: " + tmpPersona.getAltura() + "\tEdad: " + tmpPersona.getEdad());
x++;
}
} else {
for (int x = 0; x <= listaPersonas.size(); x++) {
Iterator<Persona> it = listaPersonas.iterator();
while (it.hasNext()) {
tmpPersona = it.next();
if (x == tmpPersona.getNumero()) {
System.out.println((x + 1) + ". Nombre: " + tmpPersona.getNombre() + "\tEstatura: " + tmpPersona.getAltura() + "\tEdad: " + tmpPersona.getEdad());
}
}
}
}
}
public static void ordenarPersonas(String opcion) {
persona.setOpcion(opcion);
int numero;
Iterator<Persona> it2 = listaPersonas.iterator();
while (it2.hasNext()) {
Iterator<Persona> it = listaPersonas.iterator();
numero = 0;
tmpPersona = it2.next();
while (it.hasNext()) {
tmpPersona2 = it.next();
if (tmpPersona.compareTo(tmpPersona2) > 0) {
numero++;
}
}
tmpPersona.setNumero(numero);
}
}
}