我有两个班级是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;
}
但是它并没有选择价值最小的房间,只是选择一个房间来阅读。
答案 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);
}
}
我对您的代码进行了一些其他细微更改。
min=999999
而不是min=99999
?使用Integer.MAX_VALUE
表示所有其他数字必须小于该值。此外,r.setRoomStatus(1);
是什么意思?什么是1?不要使用幻数 - 在Room类上创建enum或创建静态变量,例如final static int ROOM_OCCUPIED = 1
并改为使用r.setRoomStatus(Room.ROOM_OCCUPIED);
。