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