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

Título: Ejercicios resueltos Java Comparar objetos interface Comparable compare CU00913C
Publicado 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
Código: [Seleccionar]
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

Código: [Seleccionar]
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;
    }

}
Título: Re:Ejercicios resueltos Java Comparar objetos interface Comparable compare CU00913C
Publicado por: Ogramar en 19 de Julio 2020, 20:04
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