1

Room と Guest の 2 つのクラスがあります。適切な部屋を見つけるには、部屋で予約したゲストの数を計算する必要があります。例: guest 5 人 (guestnum) の予約ですが、3 つの部屋があります: 2 人 (roomSeat) の A1001、6 人 (roomSeat) の A1002 (roomSeat)、8 人 (roomSeat) の A1003 です。次のように計算しました: |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 の慣例では、キャメルケースではなくキャメルケースを使用してメソッドに名前を付けます (つまり、最初の文字は小さくする必要があります)。
  • マジック ナンバーを使用しないでmin=999999くださいmin=99999Integer.MAX_VALUE他のすべての数値がそれより小さくなければならないことを示すために使用します。

また、どういうr.setRoomStatus(1);意味ですか?1とは?マジック ナンバーを使用しないでください —列挙型を作成するか、Room クラスで静的変数を作成します。たとえば、代わりにfinal static int ROOM_OCCUPIED = 1使用します。r.setRoomStatus(Room.ROOM_OCCUPIED);

于 2013-10-17T17:04:54.563 に答える