Autor Tema: Java ordenar los elementos de un conjunto por un criterio SortedSet CU00924C  (Leído 3252 veces)

Pepote21

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 92
    • Ver Perfil
Hola a todos. Os paso mi código al ejercicio CU00924C del manual de programación Java con dos clases, Hotel y Principal.

Para el ejercicio he puesto una variable más en la clase Hotel, int numZona, que no estaba prevista, y segundo no he puesto los métodos equals() y hascode(), lo cual no sé si es correcto, debido a mi falta de aprendizaje.

GRACIAS.
Un saludo.

Código: [Seleccionar]
import java.util.Objects;

/**
 * Ejercicio tema CU00924C
 * Interfaces Set y SortedSet
 * @author
 */
public class Hotel implements Comparable<Hotel>{
    private int idHotel;
    private String zona;
    private int precio;
    private int numZona;
     
    public Hotel(int idHotel,int numZona, int precio){
        this.idHotel=idHotel;
        switch(numZona){
            case 0: setZona("Playa");
            break;
            case 1: setZona("Montaña");
            break;
            case 2: setZona("Rural");
            break;
            default: setZona("null");
            break;
        }
        this.precio=precio;
    }
   
    public void setZona(String zona){
        this.zona=zona;
    }
   
    public void setNumZona(int numZona){
        this.numZona=numZona;
    }
   
    public int getNumZona(){
        return numZona;
    }
   
    public String getZona(){
        return zona;
    }

    @Override
    public int compareTo(Hotel o) {
        return this.precio-o.precio;
    }
   

    @Override
    public String toString() {
        return "Hotel{" + "idHotel=" + idHotel + ", zona=" + zona + ", precio=" + precio + '}';
    }
   
}

Código: [Seleccionar]
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

/**
 *
 * @author
 */
public class Principal {
    public static void main(String[] args){
        Set<Hotel> cjsh = new HashSet<Hotel>();
        SortedSet<Hotel> cjssplaya = new TreeSet<Hotel>();
        SortedSet<Hotel> cjssmontana = new TreeSet<Hotel>();
        SortedSet<Hotel> cjssrural = new TreeSet<Hotel>();
        Random rnd=new Random();
        Scanner sc=new Scanner(System.in);
        int eleccion=0;
       
        for(int i=0; i<12; i++){
            int n=rnd.nextInt(3);
            Hotel h= new Hotel(i+1,n,(int)(rnd.nextDouble()*110+41));
            h.setNumZona(n);
            cjsh.add(h);

            if(h.getNumZona()==0){
                cjssplaya.add(h);
            }else if(h.getNumZona()==1){
                cjssmontana.add(h);
            }else{
                cjssrural.add(h);
            }
           
        }
        System.out.println("Hoteles en el conjunto: "+cjsh.toString());
        System.out.println("Hoteles zona playa (ordenados por precio): "+cjssplaya.toString());
        System.out.println("Hoteles zona montaña (ordenados por precio): "+cjssmontana.toString());
        System.out.println("Hoteles zona rural (ordenados por precio): "+cjssrural.toString());
       
        do{
            System.out.println("Elije zona de hotel. (1)Playa, (2)Montaña, (3)Rural");
            eleccion=sc.nextInt();
       
            if(eleccion==1){
                System.out.println("Elección: 1");
                System.out.println("Hoteles en el conjunto para la selección \"Playa\" ordenados por precio: ");
                System.out.println(cjssplaya.toString());
            }else if(eleccion==2){
                System.out.println("Elección: 2");
                System.out.println("Hoteles en el conjunto para la selección \"Montaña\" ordenados por precio: ");
                System.out.println(cjssmontana.toString());
            }else if(eleccion==3){
                System.out.println("Elección: 3");
                System.out.println("Hoteles en el conjunto para la selección \"Rural\" ordenados por precio: ");
                System.out.println(cjssrural.toString());
            }else{
                System.out.println("Elección incorrecta. Vuelva a elegir");
            }
        }while(eleccion<1 || eleccion>3);

    }
}
« Última modificación: 18 de Abril 2017, 19:47 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas Pepote21, el ejercicio hace lo que se pedía pero hay detalles en el código que se pueden mejorar

Si no has hecho el curso de java desde cero http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188 te recomiendo que lo hagas pues ahí se explican o repasan muchos conceptos importantes

Definir el atributo numZona puede ser razonable en algunos casos. No obstante en este caso el ejercicio no lo pide, por ello es preferible ceñirse a lo que dice el ejercicio. El ejercicio se puede resolver sin necesidad de definir numZona

Haces cosas como estas conversiones (int)(rnd.nextDouble()*110+41) que no resultan necesarias

En este hilo puedes ver una forma de diseño alternativa: https://www.aprenderaprogramar.com/foros/index.php?topic=5897.0

Creo que si no has hecho el curso que te he comentado sería recomendable

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