Autor Tema: Ejercicios resueltos Java Comparar objetos interface Comparable compare CU00913C  (Leído 1241 veces)

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
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;
    }

}
« Última modificación: 19 de Julio 2020, 19:53 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2640
    • Ver Perfil
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".