2011-11-12 128 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領域將需要一個實例變量,而不是一個靜態變量,這是可能的問題的癥結所在。