1

我有两个班级是房间和客人,我需要计算房间预订的客人数量以找到合适的房间。例如:guest A 预订 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;
    }

但它不会选择价值最小的房间,它只是为了阅读而选择一个房间。

4

1 回答 1

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 类上创建一个枚举final static int ROOM_OCCUPIED = 1或创建静态变量,例如并使用它r.setRoomStatus(Room.ROOM_OCCUPIED);

于 2013-10-17T17:04:54.563 回答