Java 从与Arraylist相关的另一个类调用方法
我正在用一个抽象的Java 从与Arraylist相关的另一个类调用方法,java,Java,我正在用一个抽象的Room类和一个继承自Room的标准类构建一个应用程序。然后,我创建了一个旅舍类。在Hostel类中是ArrayList rooms,可以添加房间。我在Hostel类中创建了一个方法,该方法显示了所有可用的房间,但当我尝试在另一个类(MainGUI)中实例化该方法时,没有显示任何内容。据我所知,这是因为我每次点击按钮都会创建一个新的招待所,但我想知道如何传递数据,而不是每次创建一个新的招待所。下面是相关的代码片段 旅馆类 public Hostel() { rooms
Room
类和一个继承自Room
的标准类构建一个应用程序。然后,我创建了一个旅舍
类。在Hostel
类中是ArrayList rooms
,可以添加房间。我在Hostel
类中创建了一个方法,该方法显示了所有可用的房间,但当我尝试在另一个类(MainGUI
)中实例化该方法时,没有显示任何内容。据我所知,这是因为我每次点击按钮都会创建一个新的招待所,但我想知道如何传递数据,而不是每次创建一个新的招待所。下面是相关的代码片段
旅馆类
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);
}
roomsFreeB.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Hostel host = new Hostel();
host.showAvail();
}
});
任何帮助都将不胜感激很高兴看到您如何初始化旅馆内的房间。如果您只想初始化Hostel一次,请在侦听器之外进行初始化。在这种情况下,它不能是MainGUI中的字段
public void actionPerformed(ActionEvent e)
{
Hostel host = new Hostel();
host.showAvail();
}
在前面的代码中,创建对象,然后在方法完成后销毁。变量host是一个局部变量,因此仅在方法执行期间有效
根据需要执行的操作,您应该在main方法中声明host变量,或者在main方法中再次声明hostel数组 因为您每次都在创建新的招待所。我想在ArrayList中将有toRoom
s
您需要在actionPerformed外部创建Hostel对象。在您的情况下,它应该只创建一次。在这个创建的Hostel对象上,您将添加房间
对象
如果问题是在哪里做。。这就留给你了。这取决于你的设计
因为它可能是
您可以创建一个名为ABC
的类,在该类中可以创建hostel对象。编写一个名为getHostel()的静态方法。然后调用ABC.gethotel(),除非您省略了hotel host=new hotel()之间的代码
和host.showAvail()代码>,您从未向宿舍添加任何房间,因此没有可用房间(或任何房间)可显示。您需要在创建host
之后和showAvail
之前将房间添加到host
,或者创建一个Hostel
实例变量,将其填充到某个地方,然后打电话给showAvail
。是的,您是对的,每次执行操作时,都会创建一个新的招待所,与招待所关联的房间列表也是如此
点击按钮,您将知道要显示的旅馆(可能正在阅读您的应用程序数据库或其他内容),如果这是您的旅馆第一次有空房间,否则一旦您阅读了旅馆信息,您也将了解属于该旅馆的房间,然后可以通过构造函数或setter方法将其传递给hostel对象
代码段:
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
对象
私人旅馆代码>
这将允许引用以前输入的信息我编辑了代码,显示了阵列列表在hostel Classis中的初始化位置。我只是想知道您是否确定,房间已创建并添加到该阵列列表中?在我的hostel class中,我可以调用showAvail()方法并显示可用房间,当我尝试在MainGUI类中执行此操作时,我的问题是你在哪里填充房间
?@Kevin我在标准类中有一个标准房间的构造函数,然后将它们添加到hotel类中的数组列表中它们是否添加到其构造函数中的hotel
?如果是这样的话,也发布代码。如果没有,那就是你的问题,添加房间
s的代码永远不会被调用。我已经添加了添加房间构造函数。addRoom()
是一个方法,而不是构造函数。它不会自动调用,您也不会在发布的代码中调用它,因此,旅舍及其房间
永远不会添加房间
。在执行的操作中,我只希望该方法起作用,从而通过JOptionPane显示我的可用房间,如showAvail中所示method@John能源部:通过工作,你是说JOptionPane没有显示吗?我从hotel类创建了一个hotel,然后这个hotel添加了房间,“工作”意味着单击按钮即可显示已添加的房间roomsFreeB@JohnDoe:构造函数初始化房间的arraylist,但不创建任何房间,因此程序不会显示任何内容,因为没有可显示的房间,因为您不调用host.addRoom()
方法在创建旅舍
和显示其房间之间,从未添加任何房间。