Autor Tema: Interface Comparator API java Clase Collections. Código ejemplo ordenar CU00918C  (Leído 2140 veces)

HumbertoAli

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 21
    • Ver Perfil
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 :(
« Última modificación: 11 de Junio 2017, 17:28 por Ogramar »

Ogramar

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

 

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