如何在 Java 中创建几个整数和输入整数的 'best fit' 比较?

How to create a 'best fit' comparison of several integers and an input integer in Java?

我有 3 个(将来可能会更改为更多房间,但这无关紧要)房间,每个房间都有不同数量的座位(假设这些是 'Room' 个对象):

Room Seats
1 10
2 20
3 30

然后我输入一个我需要保留的座位数的值,然后我的代码会根据用户的输入自动为用户分配一个房间,该房间具有“最适合”或最接近的座位数量最适合他们的需求。所以一些例子

User inputs: My Code Assigns them Room:
10 1
22 3
25 3
4 1
9 1
15 2

(假设输入不会超过 30)如果输入超过 30,我会做其他事情,这与这个问题无关。

所以这是我的尝试:

returnValue = 0;
inputValue = 10; //can be anything, doesn't have to be 10
ArrayList<Room> rooms= new ArrayList<Room>(); //where each room is already in the array list identified by it's unique number 

//assume getRoomNumber() returns the room number of the Room object
// assume getRoomSeats() returns the number of seats of a Room object

for (Room i: rooms){

    if (i.getRoomSeats()==inputValue){

        returnValue = i.getRoomNumber();
    }
    elif(i.getRoomSeats()<inputValue){//donothing}

    elif(i.getRoomSeats()>inputValue){

        returnValue = i.getRoomNumber;

}}}

这是做我想做的最好的方法吗?

你可以这样做

import java.util.ArrayList;
import java.util.Comparator;

public class Main {

    public static void main(String[] args) {
        new Main().test();
    }

    void test() {
        int inputValue = 22;

        ArrayList<Room> rooms = new ArrayList<Room>(); // where each room is already in the array list identified by
        rooms.add(new Room(10, 1));
        rooms.add(new Room(20, 2));
        rooms.add(new Room(30, 3));

        Integer currentDifference = null;
        Room roomWithMinimalDifference = null;

        for (Room room : rooms) {
            int difference = room.getRoomSeats() - inputValue;
            System.out.println("room "+room.getRoomNumber()+" difference "+difference);
            boolean roomFitsEnteredSeats = difference >= 0; //check if room fits the entered value

            if(roomFitsEnteredSeats) {
                if (currentDifference == null || difference < currentDifference) {
                    currentDifference = difference;
                    roomWithMinimalDifference = room;
                }
            }
        }

        if (roomWithMinimalDifference != null) {
            System.out.println("found room" + roomWithMinimalDifference.getRoomNumber() + " seats "
                    + roomWithMinimalDifference.roomSeats);
        } else {
            System.out.println("no room was found");
        }

        System.out.println("-----------------------");

        //========== or use this with java >= 8
        Room bestMatchingRoom = rooms.stream()
                .sorted(Comparator.comparingInt(Room::getRoomSeats))
                .filter(r -> r.getRoomSeats() >= inputValue)
                .findFirst()
                .orElse(null);

        if (bestMatchingRoom != null) {
            System.out.println("found room" + roomWithMinimalDifference.getRoomNumber() + " seats "
                    + roomWithMinimalDifference.roomSeats);
        } else {
            System.out.println("no room was found");
        }
    }

    class Room {
        int roomSeats;
        int roomNumber;

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

        public int getRoomSeats() {
            return roomSeats;
        }

        public void setRoomSeats(int roomSeats) {
            this.roomSeats = roomSeats;
        }

        public int getRoomNumber() {
            return roomNumber;
        }

        public void setRoomNumber(int roomNumber) {
            this.roomNumber = roomNumber;
        }
    }
}