Autor Tema: Tuto Java Avanzado Comparator API java Diferencias con Comparable CU00918C  (Leído 2247 veces)

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola dejo el ejercicio CU00918C del tutorial pdf de Java avanzado: Interface Comparator (API java). Diferencias con Comparable. Clase Collections. Código ejemplo.

Codigo de la clase TestEjecicio metodo main()
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Collections;
public class TestEjecicio {
    public static void main(String arg[]) {
        ArrayList<Estudiante> listaEstudiante = new ArrayList<Estudiante>();
        listaEstudiante.add(new Estudiante("Carlos",19,3));
        listaEstudiante.add(new Estudiante("Felipe",18,4));
        listaEstudiante.add(new Estudiante("Ana",18,4));
        listaEstudiante.add(new Estudiante("Rosa",15,1));
        listaEstudiante.add(new Estudiante("Jose",10,2));

        System.out.print("---------------------------------------\n");
        System.out.println("Lista de estudiantes sin ordenar\n---------------------------------------");
        PresentarListas(listaEstudiante);//Se presenta la lista sin ordenar
        System.out.print("---------------------------------------\n");
        System.out.println("Personas Ordenadas por orden natural\n---------------------------------------");
        Collections.sort(listaEstudiante);  // Ordenar por orden natural (alfabetico) por nombre
        PresentarListas(listaEstudiante);   // Presentar la lista 
        System.out.print("---------------------------------------\n ");
        System.out.println("Personas Ordenadas por Edad\n---------------------------------------");
        Collections.sort(listaEstudiante, new CompararEstudiantePorEdad());// Ordenar por edad
        PresentarListas(listaEstudiante);//Presentar la lista
        System.out.print("---------------------------------------\n ");
        System.out.println("Personas Ordenadas por Curso\n---------------------------------------");
        Collections.sort(listaEstudiante, new CompararEstudiantePorCurso());// Ordenar por curso
        PresentarListas(listaEstudiante);//Presentar la lista 
        System.out.println("\n---------------------------------------");
    }
    //Metodo para presentar las listas de estudiantes ordenadas
    public static void PresentarListas(ArrayList<Estudiante> listaEstudiante){
        System.out.print("Presentar la lista listaEstudiante\n");
        System.out.print(listaEstudiante.toString()+"\n");
        System.out.print("Presentar la Clase Estudiante con los metodos get\n");
        System.out.println("\tNombre\tEdad\tCurso\t");
        for(Estudiante tmp:listaEstudiante){
            System.out.print("\t"+tmp.getNombre()+"\t"+tmp.getEdad()+"\t"+tmp.getCurso()+"\n");
        }

       
    }
}

Clase Estudiantes
Código: [Seleccionar]
public class Estudiante implements Comparable<Estudiante> {
    private String nombre;
    private int edad;
    private int curso;

    public Estudiante(){
        nombre="";
        edad=0;
        curso=0;
    }   

    public Estudiante ( String nombre, int edad, int curso) {

        this.nombre = nombre;
        this.edad = edad;
        this.curso = curso;
    }

    @Override
    public String toString() {
        return "Estudiante =>: "+nombre+" Edad: "+edad+" Curso: "+curso+"\n";}

    @Override
    public int compareTo(Estudiante o) {
        return this.nombre.compareTo(o.nombre);
    }

    public String getNombre() {return nombre;}

    public int getEdad() {return edad;}

    public int getCurso() {return curso;}

    public void setNombre() {this.nombre=nombre;}

    public void setEdad() {this.edad=edad;}

    public void setCurso() {this.curso=curso;}
}


Clases CompararEstudiantePorCurso y CompararEstudiantePorEdad
Código: [Seleccionar]
import java.util.Comparator;

public class CompararEstudiantePorCurso implements Comparator<Estudiante> {
    @Override
    public int compare(Estudiante o1, Estudiante o2) {
    return o1.getCurso() - o2.getCurso(); // Devuelve un entero positivo si la altura de o1 es mayor que la de o2
    }
}
Código: [Seleccionar]
import java.util.Comparator;

public class CompararEstudiantePorEdad implements Comparator<Estudiante> {
    @Override
    public int compare(Estudiante o1, Estudiante o2) {
    return o1.getEdad() - o2.getEdad(); // Devuelve un entero positivo si la altura de o1 es mayor que la de o2
    }
}
Adios  ;)
« Última modificación: 06 de Diciembre 2019, 18:00 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:Tuto Java Avanzado Comparator API java Diferencias con Comparable CU00918C
« Respuesta #1 en: 06 de Diciembre 2019, 18:13 »
Buenas, para quien revise este ejercicio algunas indicaciones:

- Nombres de clases como CompararEstudiantePorCurso o CompararEstudiantePorEdad no son adecuados. Sería preferible ComparadorDeEstudiantePorCurso o ComparadorDeEstudiantePorEdad. En este hilo pueden verse algunas indicaciones de cómo nombrar clases en Java: https://aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

- En el código hay algún comentario erróneo por ejemplo en lugar de
return o1.getCurso() - o2.getCurso(); // Devuelve un entero positivo si la altura de o1 es mayor que la de o2

debería ser
return o1.getCurso() - o2.getCurso(); // Devuelve un entero positivo si el curso de o1 es mayor que el curso de o2

Por lo demás, el código hace lo que pedía el ejercicio correctamente.

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".