Autor Tema: Java diferencia entre conjunto ordenado y no ordenado HashSet TreeSet CU00924C#  (Leído 4162 veces)

Erik_Escriche

  • Principiante
  • **
  • Mensajes: 65
    • Ver Perfil
Buenas. Dejo mi solución al ejercicio de la entrega CU00924C del curso Lenguaje de Programación Java Nivel Avanzado I.

Citar
Crea una clase denominada Hotel con los atributos idHotel (int), zona(String), y precio (int). Los valores para zona podrán ser "playa","montaña" o "rural". El precio supondremos que es un dato en euros que podrá tomar valores entre 40 y 150.

Crea una clase con el método main donde se cree un conjunto sin ordenar de 12 hoteles. El programa nos mostrará por consola este conjunto de hoteles y nos preguntará en qué zona queremos el hotel.

Tras ésto el programa creará un conjunto ordenado por precio con los hoteles cuya zona corresponda con la zona elegida y los mostrará por consola.

Clase Hotel.
Código: [Seleccionar]
import java.util.Objects;
public class Hotel implements Comparable<Hotel>{
    //Atributos.
    private int idHotel;
    private String zona;  //Playa, montaña o rural.
    private int precio;
    public Hotel (int idHotel, String zona, int precio) {
        this.idHotel=idHotel;
        this.zona=zona;
        this.precio=precio;
    }

    @Override
    public String toString () {return "Hotel -> ID: "+idHotel+" Zona: "+zona+" Precio: "+precio; }

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

    @Override
    public int hashCode() {return idHotel+zona.hashCode()+precio;}

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {return false;}
        if (getClass()!=obj.getClass()) {return false;}
        final Hotel other = (Hotel) obj;
        if (this.idHotel!=other.idHotel) {return false;}
        if (!Objects.equals(this.zona, other.zona)) {return false;}
        if (this.precio != other.precio) {return false;}
        return true;
    }
}

Clase TestHotel.
Código: [Seleccionar]
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.HashSet;
import java.util.Set;
import java.util.Scanner;
import java.util.Random;
public class TestHotel {
    public static void main (String [] args) {
        Scanner entrada = new Scanner (System.in);
        Random rnd = new Random();
        int respuesta = 0;
        Set<Hotel> listaCompleta = new HashSet <Hotel>();
        SortedSet<Hotel> listaPlaya = new TreeSet<Hotel>();
        SortedSet<Hotel> listaMontana = new TreeSet<Hotel>();
        SortedSet<Hotel> listaRural = new TreeSet<Hotel>();
        for (int i=0; i<12; i++) {
            int precio = rnd.nextInt(151)+50;
            int numR = rnd.nextInt(3);
            if (numR==0) {Hotel hotel = new Hotel (i+1, "playa", precio);
                listaCompleta.add(hotel);
                listaPlaya.add(hotel);
            }
            else if (numR==1) {Hotel hotel = new Hotel (i+1, "montaña", precio);
                listaCompleta.add(hotel);
                listaMontana.add(hotel);
            }
            else {Hotel hotel = new Hotel (i+1, "rural", precio);
                listaCompleta.add(hotel);
                listaRural.add(hotel);
            }           

        }           
        System.out.println ("Conjunto de hoteles disponibles: ");
        System.out.println(listaCompleta);
        System.out.println ("Elige el tipo de zona donde quieres reservar el hotel.");
        System.out.println ("(1) Playa. (2) Montaña. (3) Rural.");
        respuesta= entrada.nextInt();
        switch (respuesta) {
            case 1: System.out.println ("Hoteles en el conjunto para la sección playa ordenados por precio: "+listaPlaya); break;
            case 2: System.out.println ("Hoteles en el conjunto para la sección montaña ordenados por precio: "+listaMontana); break;
            case 3: System.out.println ("Hoteles en el conjunto para la sección rural ordenados por precio: "+listaRural); break;
        }
    }
}

¡Saludos!
« Última modificación: 14 de Octubre 2020, 18:16 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas Erik ejercicio bien resuelto; Una duda que me queda, aunque no es lo importante en el ejercicio: para generar el precio el ejercicio decía que debía estar entre 40 y 150 pero esto no me cuadra con el código

int precio = rnd.nextInt(151)+50;

De hecho en una ejecución del programa por ejemplo me saca esto:

Conjunto de hoteles disponibles:
[Hotel -> ID: 12 Zona: playa Precio: 52, Hotel -> ID: 4 Zona: rural Precio: 113, Hotel -> ID: 7 Zona: rural Precio: 173, Hotel -> ID: 9 Zona: montaña Precio: 129, Hotel -> ID: 2 Zona: montaña Precio: 119, Hotel -> ID: 10 Zona: playa Precio: 164, Hotel -> ID: 11 Zona: playa Precio: 163, Hotel -> ID: 5 Zona: playa Precio: 66, Hotel -> ID: 6 Zona: playa Precio: 129, Hotel -> ID: 1 Zona: montaña Precio: 117, Hotel -> ID: 8 Zona: montaña Precio: 120, Hotel -> ID: 3 Zona: rural Precio: 115]
Elige el tipo de zona donde quieres reservar el hotel.
(1) Playa. (2) Montaña. (3) Rural.

Pero ahí se encuentra por ejemplo un precio de 173 que no sería correcto


Salu2

Erik_Escriche

  • Principiante
  • **
  • Mensajes: 65
    • Ver Perfil
Antes de nada, muchas gracias por revisar mis tres ejercicios. Es verdad, la fórmula no encaja. Si quiero que saque valores entre 150 y 40 creo que debería escribir rnd.nextInt(111)+40.

Dejo de nuevo la clase TestHotel corregida:
Código: [Seleccionar]
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.HashSet;
import java.util.Set;
import java.util.Scanner;
import java.util.Random;
public class TestHotel {
    public static void main (String [] args) {
        Scanner entrada = new Scanner (System.in);
        Random rnd = new Random();
        int respuesta = 0;
        Set<Hotel> listaCompleta = new HashSet <Hotel>();
        SortedSet<Hotel> listaPlaya = new TreeSet<Hotel>();
        SortedSet<Hotel> listaMontana = new TreeSet<Hotel>();
        SortedSet<Hotel> listaRural = new TreeSet<Hotel>();
        for (int i=0; i<12; i++) {
            int precio = rnd.nextInt(111)+40;
            int numR = rnd.nextInt(3);
            if (numR==0) {Hotel hotel = new Hotel (i+1, "playa", precio);
                listaCompleta.add(hotel);
                listaPlaya.add(hotel);
            }
            else if (numR==1) {Hotel hotel = new Hotel (i+1, "montaña", precio);
                listaCompleta.add(hotel);
                listaMontana.add(hotel);
            }
            else {Hotel hotel = new Hotel (i+1, "rural", precio);
                listaCompleta.add(hotel);
                listaRural.add(hotel);
            }           

        }           
        System.out.println ("Conjunto de hoteles disponibles: ");
        System.out.println(listaCompleta);
        System.out.println ("Elige el tipo de zona donde quieres reservar el hotel.");
        System.out.println ("(1) Playa. (2) Montaña. (3) Rural.");
        respuesta= entrada.nextInt();
        switch (respuesta) {
            case 1: System.out.println ("Hoteles en el conjunto para la sección playa ordenados por precio: "+listaPlaya); break;
            case 2: System.out.println ("Hoteles en el conjunto para la sección montaña ordenados por precio: "+listaMontana); break;
            case 3: System.out.println ("Hoteles en el conjunto para la sección rural ordenados por precio: "+listaRural); break;
        }
    }
}

¡Un saludo y gracias!

 

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