如何选择价值最小的房间?

时间:2013-10-17 16:53:00

标签: java

我有两个班级是Room and Guest,我需要计算一下客房预订的数量才能找到合适的房间。例如:客人预订5人(guestnum)但我们有三个房间:A1001适合2人(roomSeat),A1002适合6人(roomSeat)和A1003适合8人(roomSeat)。我们计算如下:| 5-2 | = 3; | 5-6 | = 1; | 5-8 | = 3 =>我们选择房间A1002,因为它收到的价值最小。

在类文件处理中:

public class Fileprocessing {

    List<Room> resultInit = new ArrayList<Room>();
    //List<Services> resultInit1 = new ArrayList<Services>();
    List<Guest> resultThue = new ArrayList<Guest>();
    List<TenantInformation> resultttkt= new ArrayList<TenantInformation>();


    public Fileprocessing(){}
public List<TenantInformation> RoomforGuest(){
        for (Guest g: this.resultThue){
            int min=999999;

            TenantInformation tt = new TenantInformation();
            for (Room r: this.resultInit){
                if(g.getGuestNum()-k.getRoomSeat()<min){
                    min=Math.abs(g.getGuestNum()-r.getRoomSeat());
                    tt.setGuestName(g.getGuestName());
                    tt.setRoomName(r.getRoomName());
                    r.setRoomStatus(1);
                    resultttkt.add(tt);
                    break;                  
                }
            }
        }
        System.out.println(resultttkt);
        return resultttkt;
    }

但是它并没有选择价值最小的房间,只是选择一个房间来阅读。

1 个答案:

答案 0 :(得分:2)

你现在正在做的是看看任何房间的房间容量是否小于(999999),这很可能适用于所有房间,然后你打破了循环。所以你进入你的循环,看到找到的第一个房间符合标准,然后你打破循环。您将始终使用此方法选择列表中的第一个房间。

您需要遍历所有房间,然后决定使用哪个房间。

public List<TenantInformation> roomforGuest() {
    for (Guest g: this.resultThue){
        int min = Integer.MAX_VALUE;
        Room selectedRoom = null;

        TenantInformation tt = new TenantInformation();
        for (Room r: this.resultInit) {
            if(g.getGuestNum()-k.getRoomSeat() < min) {
                min = Math.abs(g.getGuestNum() - r.getRoomSeat());
                selectedRoom = r;
            }
        }

        tt.setGuestName(g.getGuestName());
        tt.setRoomName(selectedRoom.getRoomName());
        selectedRoom.setRoomStatus(1);
        resultttkt.add(tt);
    }
}

我对您的代码进行了一些其他细微更改。

  • Java约定是使用camelCase命名方法,而不是CamelCase(即首字母应该很小)。
  • 不要使用魔术数字,为什么它是min=999999而不是min=99999?使用Integer.MAX_VALUE表示所有其他数字必须小于该值。

此外,r.setRoomStatus(1);是什么意思?什么是1?不要使用幻数 - 在Room类上创建enum或创建静态变量,例如final static int ROOM_OCCUPIED = 1并改为使用r.setRoomStatus(Room.ROOM_OCCUPIED);