簡體   English   中英

另一個與Arraylist相關的類的調用方法

[英]Calling method from another class which relates to Arraylist

我正在構建一個具有Room類的應用程序,該類是抽象的,而Standard類則繼承自Room 然后,我創建了一個Hostel類。 Hostel類中是可以添加ArrayList<Room> rooms 我在Hostel類中創建了一個顯示所有可用房間的方法,但是當我嘗試在另一個類( MainGUI )中實例化此方法時,什么也沒有顯示。 據我所知,這是因為每次單擊按鈕時我都會創建一個新旅館,但我想知道如何傳遞數據,而不是每次都創建一個新旅館。 以下是相關的代碼片段。

Hostel Class

public Hostel()
{
    rooms = new ArrayList<Room>();
}

public void showAvail()
{
    for (Room room : rooms)
    {
        if (room.available == true) 
        {
                 theString = room.getRoomData() + "\n";
                 //System.out.println("Available Rooms" + "\n" + theString);
                 JOptionPane.showMessageDialog(null,theString);
        }
    }
}

public void addRoom(Room theRoom)
{
    rooms.add(theRoom);
}

MainGUI Class

roomsFreeB.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        Hostel host = new Hostel();
        host.showAvail();
    }
});

任何幫助,將不勝感激

除非您省略了Hostel host = new Hostel();之間的代碼Hostel host = new Hostel(); host.showAvail(); ,您從不向旅館添加任何房間,因此沒有可供顯示的房間(或任何房間)。 您需要在創建host之后並且在showAvail之前添加房間作為host ,或者創建一個Hostel實例變量,將其填充到某個地方,然后在其上調用showAvail

最好看看您如何在Hostel內初始化房間 如果只想初始化一次Hostel,請在Listener之外進行。 在這種情況下,它一定不能是MainGUI中的字段。

 public void actionPerformed(ActionEvent e)
{
    Hostel host = new Hostel();
    host.showAvail();
}

在前面的代碼中,創建對象,然后在方法完成后銷毀。 變量宿主是局部變量,因此僅在方法執行期間存在。

根據您要執行的操作,應該在main方法內聲明host變量,或者在main方法內再次聲明hostel的數組。

由於您每次都創建新的旅館。 我想ArrayList中會有Room

您需要在actionPerformed之外創建Hostel對象。 並且在您的情況下,它應該只創建一次。 在此創建的Hostel對象上,您將添加Room對象。

如果問題是在哪里做..它留給您。 它在您的設計上。

例如可以。

您可以創建一個稱為ABC的類,在其中可以創建宿舍對象。 編寫一個名為getHostel()的靜態方法。 然后調用ABC.getHostel()

是的,您沒錯,每次執行操作都會創建一個新的旅館,因此與旅館關聯的房間列表也會被創建。

單擊該按鈕,您將知道要顯示哪個旅館(可能正在讀取應用程序數據庫或其他內容),以防萬一這是您旅館第一次沒有空房間,否則一旦您閱讀了旅館信息,您還將知道關於屬於旅館的房間的信息,然后可以通過構造函數或setter方法將其傳遞給您的旅館對象。

程式碼片段:

createHostel(String hostelName) {
   //read from database
   //No hostel with hostelname found create a new hostel else if hostel is found send   the same (by this time hostel object would have room information also
}

你的行動

public void actionPerformed(ActionEvent actionEvent) {
   //MyFactory.getHostel(String hostelName)
   //Once you have hostel object call showAvail on it, if its new you will get nothing else you will get all the rooms available
}

希望這能給您一些見識。

您的問題正是您所想的,每次單擊按鈕都在創建一個新的ArrayList,這樣您就永遠看不到數據。 您應該首先在MainGUI類中創建一個hostel對象,

private Hostel hostel;

這將允許引用先前輸入的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM