更改ArrayList中对象的字段,然后跳过该Object下一次迭代

时间:2018-04-04 19:18:30

标签: java arraylist

如果您不想阅读所有内容,我的问题是:如何更改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

2 个答案:

答案 0 :(得分:1)

您在bookDoubleHotelRoom功能的开头创建了一个双人房。 然后你检查那个房间是否空置,我猜你把房间初始化为空置。

你应该检查rooms.isVacant()。

此外,不需要getRoomType字段。您可以检查对象是什么类。 Determine if two Java objects are of the same class

答案 1 :(得分:0)

在我看来,bookDoubleHotelRoom方法中的for循环将遍历所有hotelRooms,而不考虑预订了多少个房间。 if运行,找到匹配,确实有效,然后中断,从而得到一个结果。我相信你的for循环需要一个限制条件,即预订了许多房间。