2015-12-18 2 views
-4

Привет, я пытаюсь создать «класс, называемый HotelReport, который, когда предоставляется объект отеля, будет содержать короткий текстовый отчет, описывающий название отеля, количество комнат и, для каждой комнаты перечислены номера и размер кроватей. », но я не уверен, как добавить комнаты и количество кроватей и получить окончательный отчет для выхода, любую помощь?Как вывести объект и его переменные

Отель класса

import java.util.*; 

public class Hotel { 

// Hotel Name 
private String hotelname; 

public void setName(String hotelname) { 
    this.hotelname = hotelname; 

} 

public String getName() { 
    return this.hotelname; 
} 

// Hotel Rooms 
private List<String> hotelRooms = new ArrayList<String>(); 

public void sethotelRooms(List<String> hotelRooms) { 
    this.hotelRooms = hotelRooms; 

} 

public List<String> gethotelRooms() { 
    return hotelRooms; 
    } 
} 

Class Room

import java.util.*; 

public class Room { 

private int roomNumber; 

public Room(int roomNumber) { 
    this.roomNumber = roomNumber; 
} 

private static List<Bed> beds = new ArrayList<Bed>(); 

public Room(List<Bed> beds) { 
    setBeds(beds); 
} 

public void setBeds(List<Bed> beds) { 
    this.beds = beds; 
} 

public List<Bed> getBeds() { 
    return beds; 
} 

public String getFormat() { 
    return String.format("Beds:\t%s\n", getBeds()); 
} 
} 

Кровать класса

import java.util.ArrayList; 
import java.util.*; 

    public class Bed { 
    // size of bed 
    private int singleBed = 1; 
    private int doubleBed = 2; 

    // implement single bed 
    public int getsingleBed() { 
    return singleBed; 
    } 

    public void setsingleBed() { 
    this.singleBed = singleBed; 
    } 

    // implement double bed 
    public int getdoubleBed() { 
    return doubleBed; 
} 

public void setdoubleBed() { 
    this.doubleBed = doubleBed; 
} 
} 

HotelReport Класс

public class HotelReport { 

public static void main(String[] args) { 

    Hotel hotelRooms = new Hotel(); 
    hotelRooms.setName("Intercontinental"); 
    hotelRooms.addRoom(1,2,3) 


    } 
    } 
+0

'hotelRooms.addRoom (1,2,3)' Вы знаете, что делает эта функция? –

+1

Потому что я не вижу никакого метода 'addRoom' с параметром' int, int, int' в классе 'Hotel' ... –

+0

Какая ошибка вы получаете? –

ответ

0

Попробуйте это:

Класс отеля:

class Hotel { 
    private String name; 
    private List<Room> rooms = new ArrayList<>(); 

    public void addRoom(Room room) { 
     rooms.add(room); 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public List<Room> getRooms() { 
     return rooms; 
    } 

    public void setRooms(List<Room> rooms) { 
     this.rooms = rooms; 
    } 

    @Override 
    public String toString() { 
     return "Hotel{" + 
       "name='" + name + '\'' + 
       ", rooms=" + rooms + 
       '}'; 
    } 
} 

класс номер:

class Room { 
    private int roomNum; 
    private List<Bed> beds = new ArrayList<>(); 

    public Room(int roomNum) { 
     this.roomNum = roomNum; 
    } 

    public void addBed(Bed bed) { 
     beds.add(bed); 
    } 

    public int getRoomNum() { 
     return roomNum; 
    } 

    public void setRoomNum(int roomNum) { 
     this.roomNum = roomNum; 
    } 

    public List<Bed> getBeds() { 
     return beds; 
    } 

    public void setBeds(List<Bed> beds) { 
     this.beds = beds; 
    } 

    @Override 
    public String toString() { 
     return "Room{" + 
       "roomNum=" + roomNum + 
       ", beds=" + beds + 
       '}'; 
    } 
} 

Кровать класса

class Bed { 

    private BedType bedType = BedType.SINGLE; 

    public Bed() { 
    } 

    public Bed(BedType bedType) { 
     this.bedType = bedType; 
    } 

    public BedType getBedType() { 
     return bedType; 
    } 

    public void setBedType(BedType bedType) { 
     this.bedType = bedType; 
    } 

    public enum BedType { 
     SINGLE, DOUBLE 
    } 

    @Override 
    public String toString() { 
     return "Bed{" + 
       "bedType=" + bedType + 
       '}'; 
    } 
} 

Наконец использование:

public static void main(String[] args) throws Exception { 

     // beds for room#1 
     Bed bed1 = new Bed(Bed.BedType.SINGLE); 
     Bed bed2 = new Bed(Bed.BedType.DOUBLE); 
     // beds for room#2 
     Bed bed3 = new Bed(Bed.BedType.SINGLE); 
     Bed bed4 = new Bed(Bed.BedType.SINGLE); 

     // Room #1 
     Room room1 = new Room(1); 
     room1.addBed(bed1); 
     room1.addBed(bed2); 

     // Room #1 
     Room room2 = new Room(2); 
     room2.addBed(bed3); 
     room2.addBed(bed4); 

     // Hotel 
     Hotel hotel = new Hotel(); 
     hotel.setName("Intercontinental"); 
     hotel.addRoom(room1); 
     hotel.addRoom(room2); 

    } 

Получить данные:

// get the data 
     String hotelName = hotel.getName(); 
     System.out.println("hotelName = " + hotelName); 
     List<Room> rooms = hotel.getRooms(); 
     for (Room room : rooms) { 
      System.out.println("room = " + room); 
      List<Bed> beds = room.getBeds(); 
      for (Bed bed : beds) { 
       System.out.println("bed = " + bed); 
      } 
     } 

вне положенное:

hotelName = Intercontinental 
room = Room{roomNum=1, beds=[Bed{bedType=SINGLE}, Bed{bedType=DOUBLE}]} 
bed = Bed{bedType=SINGLE} 
bed = Bed{bedType=DOUBLE} 
================================ 
room = Room{roomNum=2, beds=[Bed{bedType=SINGLE}, Bed{bedType=SINGLE}]} 
bed = Bed{bedType=SINGLE} 
bed = Bed{bedType=SINGLE} 
================================ 
+1

Немного объяснений было бы лучше! – Sweeper

+0

Я отредактировал ответ, вы можете проверить его сейчас –

0

Во-первых, вы бы лучше добавить addRoom() функцию в классе отеля, как это:

public void addBed(Room room){ 
    this.rooms.add(room); 
} 

Затем переопределите функцию toString для каждого класса выше.

@override 
public String toString(){ 
    String report = "Hotel name:" + this.hotelName; 
    return report; 
} 

Используйте ArrayList, чтобы вместить весь экземпляр отеля в основной функции, и вы можете использовать цикл, чтобы получить их.

0

Ваш код выглядит странно, на мой взгляд. Класс Hotel имеет поле под названием hotelRooms, которое имеет тип ArrayList<String>. Не должно быть ArrayList<Room>? Это просто имеет смысл.

И в вашем классе Bed я действительно смущен тем, что вы делаете.Я думаю, что лучше реализация будет

public class Bed { 
    private int bedSize; 
    //getter and setter for bedSize omitted. I'm lazy 
    public static final int SIZE_DOUBLE = 2; 
    public static final int SIZE_SINGLE = 1; 
} 

Теперь вы можете установить размер кровати в двуспальной кровати, как этот

yourBed.setBedSize (Bed.SIZE_DOUBLE); 

Теперь, когда ваши проблемы фиксированные, давайте посмотрим, как мы можем превратить эти объекты в String ,

Чтобы превратить объект в строку, вы можете написать метод, который возвращает String, что-то вроде

public String description() { 
    //blah blah blah 
} 

Тем не менее, лучше использовать метод toString в Object для этой цели. Прочитайте Эффективная Java для получения дополнительной информации о том, почему вы должны это делать.

@Override 
public String toString() { 
    //blah blah blah 
} 

И вы пишете метод toString для каждого класса, который связан с отелем. Давайте посмотрим, как toString методы в каждом классе будет выглядеть следующим образом: (я только показать тело, потому что я ленив)

кровать:

if (bedSize == SIZE_DOUBLE) 
    return "a double bed"; 
else 
    return "a single bed"; 

номер:

return "Room " + Integer.toString (roomNumber); 

Отель:

StringBuilder builder = new StringBuilder(); 
builder.append ("A hotel called").append(hotelName).append("."); 
builder.append ("It has ").append (hotelRooms.size()).append (" rooms."); 
for (Room room : hotelRooms) { 
    builder.append (room.toString()).append (" has "); 
    for (Bed bed : room.beds) { 
     builder.append (bed.toString()).append (" "); 
    } 
    builder.append ("."); 
} 

return builder.toString(); 

Теперь вы можете указать описание отеля:

Hotel hotel = new Hotel(); 
//do stuff with the hotel, such as setting some of its properties 
System.out.println (hotel.toString()); 
Смежные вопросы