2011-11-12 45 views
-1

我创建了一个Hostel类和Room班,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'作为返回类型。 –

+0

为什么可用是一个静态变量?什么是循环中使用的房间变量? – andrershov

回答

7

有几个问题:

  • 看来你已经声明了变量Room.available为静态变量,因此,作为类的一部分,而不是房间。所有房间将共享相同的可用状态。

  • if语句是外循环,这样无论是循环对所有的房间或没有房间都

  • 您申报返回室执行,但你总是返回null。返回无效或返回List<Room>可用房间。

  • 你不需要测试if (variable == true),因为if (variable)会做同样的事情,虽然它不会做任何胳膊。 (风格)

  • 对if语句使用大括号和缩进,以增加清晰度。 (风格)

这是一段代码片段。我不知道theString是否会得到所有房间或只有可用的房间,在第二种情况下,它会将其移动到花括号中。

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

谢谢,我已经采取了你所说的一切,并按照我的希望工作 –

1

if陈述不合适。尝试将其放入for循环中。

1

由于没有显示类声明,所以很难回答这个问题。

这听起来就好像你if声明必须是内部的for循环:

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

对于这项工作的available领域将需要一个实例变量,而不是一个静态变量,这是可能的问题的症结所在。