Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建';最佳匹配';java中几个整数和一个输入整数的比较?_Java_Arrays_Loops_Oop_Integer - Fatal编程技术网

如何创建';最佳匹配';java中几个整数和一个输入整数的比较?

如何创建';最佳匹配';java中几个整数和一个输入整数的比较?,java,arrays,loops,oop,integer,Java,Arrays,Loops,Oop,Integer,我为这个糟糕的标题道歉,我想不出更好的表达方式,但问题是: 我有3间(将来可能会改成更多房间,但这无关紧要)房间,都有不同数量的座位(假设这些是“房间”对象): 然后,我输入一个我需要预订的座位数量的值,然后我的代码将根据用户的输入自动为用户分配一个房间,该房间具有“最适合”或最接近数量的座位,最适合他们的需求。所以有一些例子 User inputs: My Code Assigns them Room: 10 1 22

我为这个糟糕的标题道歉,我想不出更好的表达方式,但问题是:

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

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

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;

}}}
returnValue=0;
输入值=10//可以是任何东西,不必是10
ArrayList房间=新建ArrayList()//每个房间都已在阵列列表中,由其唯一编号标识
//假设getRoomNumber()返回房间对象的房间号
//假设getRoomSeats()返回房间对象的座位数
用于(房间i:房间){
if(i.getRoomSeats()==inputValue){
returnValue=i.getRoomNumber();
}
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;
        }
    }
}
import java.util.ArrayList;
导入java.util.Comparator;
公共班机{
公共静态void main(字符串[]args){
新的Main().test();
}
无效测试(){
int inputValue=22;
ArrayList rooms=new ArrayList();//其中每个房间都已位于由
房间。添加(新房间(10,1));
房间。添加(新房间(20,2));
房间。添加(新房间(30,3));
整数currentDifference=null;
最小差异为空的房间;
用于(房间:房间){
int difference=room.getRoomSeats()-inputValue;
System.out.println(“room”+room.getRoomNumber()+“difference”+difference);
布尔roomFitsEnteredSeats=difference>=0;//检查房间是否符合输入的值
如果(房间设备安装位置){
if(currentDifference==null | | difference=8
Room bestMatchingRoom=rooms.stream()
.sorted(Comparator.comparingInt(房间::getRoomSeats))
.filter(r->r.getRoomSeats()>=inputValue)
.findFirst()
.orElse(空);
if(bestMatchingRoom!=null){
System.out.println(“找到的房间”+差异最小的房间。getRoomNumber()+“座位”
+差异最小的房间(房间座位);
}否则{
System.out.println(“未找到房间”);
}
}
教室{
室内座位;
房间号;
公共房间(内部房间座位,内部房间号){
超级();
this.roomSeats=roomSeats;
this.roomNumber=roomNumber;
}
公共int getRoomSeats(){
回程座位;
}
公共休息室座位(内部休息室座位){
this.roomSeats=roomSeats;
}
public int getRoomNumber(){
返回房间号;
}
公共无效setRoomNumber(内部roomNumber){
this.roomNumber=roomNumber;
}
}
}

神圣的烟雾!感谢您的努力!我会尝试一下,让你知道事情是如何进行的。非常感谢。
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;
        }
    }
}