当前位置: 首页 > 知识库问答 >
问题:

如何在Java中创建几个整数和一个输入整数的“最佳拟合”比较?

岳曦
2023-03-14

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

然后,我输入需要预订的座位数的值,然后我的代码将根据用户的输入自动为用户分配一个房间,其中包含“最适合”的房间或能够容纳最适合其需求的座位的最接近数量的房间。所以一些例子

(假设输入不会超过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;

}}}

这是我想要的最好的方式吗?

共有1个答案

陶高扬
2023-03-14

你可以这样做

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;
        }
    }
}
 类似资料:
  • 问题内容: 我很难解决这个问题的解决方案。我正在尝试用Java开发一个程序,该程序需要一个数字,例如321,并找到数字的总和,在这种情况下为3 + 2 + 1 =6。我需要任何三个数字的所有数字将它们加在一起,并使用%剩余符号存储该值。这让我感到困惑,我想感谢任何人的想法。 问题答案: 输出量

  • 问题内容: 我必须比较两个对象(不是)。比较它们的规范方法是什么? 我可以想到: 该运营商只比较基准,因此这将仅适用于较低的整数值的工作。但是也许自动装箱开始了…? 这看起来像一个昂贵的操作。是否以此方式计算出哈希码? 有点冗长… 编辑: 谢谢您的答复。尽管我现在知道该怎么办,但事实已分布在所有现有答案(甚至是已删除的答案)上,我也不知道该接受哪个答案。因此,我将接受最佳答案,即所有三种比较可能性

  • 问题内容: 我正在尝试编写代码以比较两个数组。在第一个数组中,我输入了自己的数字,但是在第二个数组中,输入了输入文件中的数字。该数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为10。两个数组以及数字的长度必须相同。 我的代码如下: 问题答案:

  • 我正在处理一个程序,我想允许用户在提示时输入多个整数。我曾尝试使用扫描仪,但发现它只存储用户输入的第一个整数。例如: 输入多个整数:1 3 5 扫描仪将仅获取第一个整数1。是否有可能从一行中获取所有3个不同的整数,并在以后使用它们?这些整数是我需要根据用户输入操作的链表中数据的位置。我无法发布我的源代码,但我想知道这是否可行。

  • 我有密码 但是当我在文本字段中输入字符时,它们会保持打印状态,直到我切换到另一个文本字段。我需要完全禁止字符输入,我的意思是当字符输入时,我需要删除字符,或者如果可能的话,以某种方式使字符甚至不出现以供听众处理,当然也不出现在文本字段中。我的意思是只有数字字符必须出现。