Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: DRANXZ88 en 02 de Septiembre 2019, 20:50
-
Solución propuesta al ejercicio CU00913C del curso avanzado de programación Java con ejercicios resueltos.
Clase principal main
package ejercicioscu00913c;
import static ejercicioscu00913c.Persona.OrdenarAltura;
import static ejercicioscu00913c.Persona.OrdenarEdad;
public class EjerciciosCu00913c {
public static void main(String[] args) {
Persona[] personas = new Persona[5];
personas[0] = new Persona("Mario", 187, 22);
personas[1] = new Persona("Pepe", 173, 52);
personas[2] = new Persona("Manuel", 158, 27);
personas[3] = new Persona("David", 164, 25);
personas[4] = new Persona("Alberto", 184, 80);
Persona[] personasOrdenadas = new Persona[5];
System.out.println("Personas sin ordenar");
for (Persona tmp : personas) {
System.out.print(tmp.toString() + "\n");
}
System.out.println();
System.out.println("Personas ordenadas por altura");
personasOrdenadas = OrdenarAltura(personas);
for (Persona tmp : personasOrdenadas) {
System.out.print(tmp.toString() + "\n");
}
System.out.println();
System.out.println("Personas ordenadas por edad");
personasOrdenadas = OrdenarEdad(personas);
for (Persona tmp : personasOrdenadas) {
System.out.print(tmp.toString() + "\n");
}
System.out.println();
}
}
Clase donde compara y ordena
package ejercicioscu00913c;
public class Persona implements Comparable<Persona> {
private String nombre;
private int altura;
private int edad;
public Persona() {
}
public Persona(String nombre, int altura, int edad) {
this.nombre = nombre;
this.altura = altura;
this.edad = edad;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getAltura() {
return altura;
}
public void setAltura(int altura) {
this.altura = altura;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
@Override
public int compareTo(Persona persona) {
int resultado = 0;
if (this.altura < persona.altura) {
resultado = -1;
} else if (this.altura > persona.altura) {
resultado = 1;
} else {
resultado = 0;
}
return resultado;
}
public int compareToEdad(Persona persona) {
int resultado = 0;
if (this.edad > persona.edad) {
resultado = 1;
} else if (this.edad < persona.edad) {
resultado = -1;
} else {
resultado = 0;
}
return resultado;
}
@Override
public String toString() {
return this.nombre + " - Altura: " + this.altura + " - Edad: " + this.edad;
}
public static Persona[] OrdenarEdad(Persona[] personas) {
Persona[] ordenado = new Persona[5];
ordenado[0] = personas[0];
for (int i = 1; i < 5; i++) {
int j = i;
while (j > 0 && personas[i].compareToEdad(ordenado[j - 1]) < 0) {
ordenado[j] = ordenado[j - 1];
j--;
}
ordenado[j] = personas[i];
}
return ordenado;
}
public static Persona[] OrdenarAltura(Persona[] personas) {
Persona[] ordenado = new Persona[5];
ordenado[0] = personas[0];
for (int i = 1; i < 5; i++) {
int j = i;
while (j > 0 && personas[i].compareTo(ordenado[j - 1]) > 0) {
ordenado[j] = ordenado[j - 1];
j--;
}
ordenado[j] = personas[i];
}
return ordenado;
}
}
-
Buenas, para quien revise este ejercicio hago algunos comentarios.
Hace lo que se pedía en el enunciado, pero como aspectos mejorables indicaría los siguientes:
- Los import static
import static ejercicioscu00913c.Persona.OrdenarAltura;
import static ejercicioscu00913c.Persona.OrdenarEdad;
podrían evitarse (yo veo preferible evitarlos).
- Este método no tiene un buen diseño: public static Persona[] OrdenarEdad(Persona[] personas)
en el sentido de que está implementado epecíficamente para un array de 5 elementos, cuando en general debemos crear código que acepte arrays de cualquier número de elementos.
Puede verse una solución más correcta en https://aprenderaprogramar.com/foros/index.php?topic=5704.0
Salu2