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: Pepote21 en 25 de Febrero 2017, 17:22

Título: Java ordenar los elementos de un conjunto por un criterio SortedSet CU00924C
Publicado por: Pepote21 en 25 de Febrero 2017, 17:22
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);

    }
}
Título: Re:Java ordenar los elementos de un conjunto por un criterio SortedSet CU00924C
Publicado por: Ogramar en 18 de Abril 2017, 19:47
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