如果您不想阅读所有内容,我的问题是:如何更改ArrayList中对象的字段,然后在循环返回更改对象时跳过该对象相同类型?
好吧,所以我有一个抽象的基类,有4个派生类。基类有一个isVacant布尔值。我有一个类基类的arraylist:
ArrayList<HotelRoom> hotelRooms = new ArrayList<>(20);
我获得了他们想要预订的房间类型的用户输入1-4。在他们输入1-4之后,我确定了一个功能来调用预订的房间。 我的问题是,如果我尝试预订多个相同类型的房间,它只会将其中一个房间设置为空置。因此,如果我尝试预订3个相同类型的房间,它只需预订一个。
while (hotel.getVacantAmount() > 0) {
int input = getInput();
bookType(input, hotel);
System.out.println("Amount of rooms the hotel has that are vacant: "
+ hotel.getVacantAmount());
}
public static void bookType(int input, Hotel h) {
Hotel hotel = h;
if (input == 1) {
hotel.bookDoubleHotelRoom();
} else if (input == 2) {
hotel.bookDoubleSuiteHotelRoom();
} else if (input == 3) {
hotel.bookKingHotelRoom();
} else if (input == 4) {
hotel.bookKingSuiteHotelRoom();
}
}
这是我遇到困难的功能。它找到一个相同类型的房间并检查它是否空置,并将其设置为空置。但在第一个之后,它就停止了。如果我删除了中断,它会将该类型的所有房间空置设置为false。它基本上是一个或全部。
public double bookDoubleHotelRoom() {
DoubleHotelRooms doubleRoom = new DoubleHotelRooms();
for (HotelRoom rooms : hotelRooms) {
if (rooms.getRoomType() == doubleRoom.getRoomType() &&
doubleRoom.isVacant() == true) {
rooms.setIsVacant(false);
break;
}
}
return doubleRoom.getAverageNightlyPrice();
}
我试图制作另一个程序,它有点笨拙,但有些困难。对不起,如果我说的很奇怪,我会尽我所能。
这是程序的输出: https://pastebin.com/MktyQ7KY
答案 0 :(得分:1)
您在bookDoubleHotelRoom功能的开头创建了一个双人房。 然后你检查那个房间是否空置,我猜你把房间初始化为空置。
你应该检查rooms.isVacant()。
此外,不需要getRoomType字段。您可以检查对象是什么类。 Determine if two Java objects are of the same class
答案 1 :(得分:0)
在我看来,bookDoubleHotelRoom方法中的for循环将遍历所有hotelRooms,而不考虑预订了多少个房间。 if运行,找到匹配,确实有效,然后中断,从而得到一个结果。我相信你的for循环需要一个限制条件,即预订了许多房间。