Оператор If не дает желаемого результата

#java #if-statement

#java #оператор if

Вопрос:

Я создал Hostel класс и Room class, Hostel класс содержит ArrayList rooms , одно значение в этом Arraylist является логическим available . В Hostel классе я создал оператор if, который должен показывать любую запись в ArrayList, где логическое значение available равно true, но вместо этого он показывает все значения, включая те, где available было false, но теперь было изменено на true. кто-нибудь может сказать мне, где я ошибся.

 public Room showAvail()
{
    String theString = "Available Rooms";

    if (Room.available == true)

    for (Room room : rooms)
    {
           theString = theString   room.getRoomData()   "n";
           System.out.println(theString);
    }
    return null;
}
  

Комментарии:

1. Прежде всего, вы должны использовать void вместо Room в качестве возвращаемого типа.

2. Почему доступна статическая переменная? Какая переменная rooms используется в цикле?

Ответ №1:

Есть несколько проблем:

  • Похоже, что вы объявили переменную Room.available как статическую переменную, таким образом, как часть класса, а не комнат. Все комнаты будут иметь одинаковый статус доступности.

  • Оператор if находится вне цикла, таким образом, цикл выполняется либо для всех комнат, либо ни для каких комнат вообще

  • Вы заявляете, что возвращаете Room, но затем вы всегда возвращаете null. Либо верните void, либо верните List<Room> для доступных номеров.

  • Вам не нужно тестировать, if (variable == true) поскольку if (variable) он сделает то же самое, хотя и не будет выполнять никаких действий arm. (стиль)

  • Для большей ясности используйте фигурные скобки и отступ для оператора if. (стиль)

Вот фрагмент кода. Я не знаю, theString получит ли он все номера или только те, которые доступны, во втором случае переместите его внутрь фигурных скобок if.

 for (Room room : rooms)
{
       theString = theString   room.getRoomData()   "n";
       if (room.available) {
           System.out.println(theString);
       }
}
  

Комментарии:

1. Спасибо, я принял все, что вы сказали, и это работает так, как я надеялся

Ответ №2:

if Оператор неуместен. Попробуйте поместить его внутрь for цикла.

Ответ №3:

На это довольно сложно ответить, поскольку вы не показали объявления классов.

Звучит так, как будто ваш if оператор должен находиться внутри цикла for:

 for (Room room : rooms)
{
     if (room.available)
     {
         theString = theString   room.getRoomData()   "n";
         System.out.println(theString);
     }
}
  

Чтобы это сработало, available поле должно быть переменной экземпляра, а не статической переменной, и это, вероятно, суть вашей проблемы.