#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
поле должно быть переменной экземпляра, а не статической переменной, и это, вероятно, суть вашей проблемы.