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: HumbertoAli en 01 de Abril 2017, 17:23

Título: Interface Comparator API java Clase Collections. Código ejemplo ordenar CU00918C
Publicado por: HumbertoAli en 01 de Abril 2017, 17:23
Buenas a todos los del foro, acá mi planteamiento ante el ejercicio CU00918C del curso de Java avanzado. Si alguien me puede corregir lo agradezco.

Citar
Crea una una clase llamada Estudiante con 3 campos (atributos). Estos serán nombre, edad y curso (donde el nombre será un String, la edad un int y el curso un int con valores entre 1 y 5 que representan desde primer curso hasta quinto curso).

En una clase con el main crea un ArrayList de 5 estudiantes. Usando Comparator establece dos órdenes totales: uno basado en la edad y otro en el curso. Además, establece como orden natural la ordenación por nombres según orden alfabético. Muestra por consola primero la lista desordenada y luego el resultado de ordenar la lista en base a los tres órdenes citados.

Ejemplo de ejecución que se espera del programa:

Lista de estudiantes sin ordenar:

nombre: Carlos, edad: 19, curso 3,

, nombre: Felipe, edad: 21, curso 1,

, nombre: Ana, edad: 18, curso 4,

, nombre: Rosa, edad: 15, curso 1,

, nombre: Jose, edad: 10, curso 2

Lista de estudiantes ordenados por orden alfabético: Ana, Carlos, Felipe, Jose, Rosa

Lista de estudiantes ordenados por edad : Felipe (21), Carlos (19), Ana (18), Rosa (15), Jose: 10

Lista de estudiantes ordenados por curso: Felipe (1), Rosa (1), Jose (2), Carlos (3), Ana (4)

clase Estudiante
Código: [Seleccionar]
public class Estudiante implements Comparable<Estudiante> {
    private String nombre;
    private int edad;
    private int curso;
   
    public Estudiante(){}
   
    public Estudiante(String nombre, int edad, int curso){
        this.nombre = nombre;
        this.edad = edad;
        this.curso = curso;
    }
    public void setNombre(String nombreX){
        this.nombre = nombreX;
    }
    public void setEdad(int edadX){
        this.edad = edadX;
    }
    public void setCurso(int cursoX){
        this.curso = cursoX;
    }
    public String getNombre(){
        return nombre;
    }
    public int getEdad(){
        return edad;
    }
    public int getCurso(){
        return curso;
    }
    public int compareTo(Estudiante x){
        return this.nombre.compareTo(x.nombre);
    }
    public String toString(){
        return "Nombre: "+nombre+", Edad: "+edad+", curso "+curso;
    }
}

clase OrdenarPorCurso
Código: [Seleccionar]
import java.util.Comparator;/**
 *
 * @author baseuser
 */
public class OrdenarPorCurso implements Comparator<Estudiante>{
    public int compare(Estudiante x, Estudiante y){
        return x.getCurso()-y.getCurso();// Devuelve un entero positivo si el curso de x es mayor que el curso de y
    }
}

clase OrdenarPorEdad:
Código: [Seleccionar]
import java.util.Comparator;/**
 *
 * @author baseuser
 */
public class OrdenarPorEdad  implements Comparator<Estudiante>{
    public int compare(Estudiante x, Estudiante y){
        return y.getEdad()-x.getEdad();
        // Devuelve un entero positivo si edad "y" es mayor que la de x
    }
   
}

y el main
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Collections;/**
 *
 * @author baseuser
 */
public class Test {
   public static void main(String []args){
       ArrayList<Estudiante> lista = new ArrayList<Estudiante>();
       lista.add(new Estudiante("Carlos", 19, 3));
       lista.add(new Estudiante("Felipe", 21, 1));
       lista.add(new Estudiante("Ana", 18, 4));
       lista.add(new Estudiante("Rosa", 15, 1));
       lista.add(new Estudiante("Jose", 10, 2));
       System.out.println("Lista de estudiantes sin ordenar:");
       for(Estudiante tmp: lista){
           System.out.println(tmp.toString());
       }
       Collections.sort(lista);
       System.out.println("Lista de estudiantes ordenados por orden alfabético: "+lista);
       Collections.sort(lista, new OrdenarPorEdad());
       System.out.println("Lista de estudiantes ordenados por edad: "+lista);
       Collections.sort(lista, new OrdenarPorCurso());
       System.out.println("Lista de estudiantes ordenados por curso: "+lista);
       
   }
   
}

Ahora bien tengo una duda con respecto a la parte final del ejercicio en donde hay que imprimir los estudiantes ordenados,  mi duda es que si es obligatorio que se imprima tal y como dice el ejemplo de ejecucion osea asi:
Lista de estudiantes ordenados por orden alfabético: Ana, Carlos, Felipe, Jose, Rosa

Lista de estudiantes ordenados por edad : Felipe (21), Carlos (19), Ana (18), Rosa (15), Jose: 10

Lista de estudiantes ordenados por curso: Felipe (1), Rosa (1), Jose (2), Carlos (3), Ana (4)...

de ser asi, necesito orientación para poder separar los datos a la hora de imprimir :(
Título: Re:Interface Comparator (API java).Clase Collections. Código ejemplo (CU00918C)
Publicado por: Ogramar en 11 de Junio 2017, 17:27
Buenas HumbertoAli, tu ejercicio está bien resuelto. Si quisieras mostrar los resultados tal y como se indica en el enunciado del ejercicio, deberías saber hacerlo ya que se trata de un conocimiento básico que se explica en el curso de Java básico http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Puedes fijarte en la solución aportada por otros compañeros para saber cómo hacerlo, por ejemplo https://www.aprenderaprogramar.com/foros/index.php?topic=5990.0

Salu2