Java ArrayList在每次迭代中清除自身
我一直在通过和抽象类练习继承,但是我在使用构造函数和ArrayList时遇到了一些麻烦 每次我查阅添加到Arraylist的所有信息时,它们似乎只打印最后添加的元素,这就是我目前得到的Java ArrayList在每次迭代中清除自身,java,inheritance,arraylist,Java,Inheritance,Arraylist,我一直在通过和抽象类练习继承,但是我在使用构造函数和ArrayList时遇到了一些麻烦 每次我查阅添加到Arraylist的所有信息时,它们似乎只打印最后添加的元素,这就是我目前得到的 public static void main(String[] args) throws IOException { do{ switch(menu){ case 1: int x=//random generated number; String name=//insert name; reception
public static void main(String[] args) throws IOException {
do{
switch(menu){
case 1:
int x=//random generated number;
String name=//insert name;
reception add=new Reception(x,name);continue;
Public class reception extends Hotel{
public Reception(int number,String name,){
super(number,name);
}
import java.util.ArrayList;
public abstract class Hotel {
ArrayList<Integer> numerodehotel = new ArrayList<Integer>();
ArrayList<String> residente1 = new ArrayList<String>();
public Hotel(int number, String resident){
this.resident1.add(resident);
this.hotelroomnumber.add(number);
}
每次我尝试打印所有元素时,它们似乎只显示两个ArrayList中最后添加的元素,几乎就像在每次迭代中重置自己一样
在main类中有一个带do的开关,我的想法是它应该添加所有的输入元素,而无需重新压缩,并且能够参考所有的输入元素在每个循环迭代中创建一个新的接收对象。尝试将此定义放在循环之前,并在循环中使用此对象。此外,还需要为值编写一个空构造函数和getter/setter:
reception add=new Reception();
do {
...
add.setNumerodehotel(x);
add.setResidente1(name);
} while (...)
public abstract class Hotel {
ArrayList<Integer> numerodehotel = new ArrayList<Integer>();
ArrayList<String> residente1 = new ArrayList<String>();
public Hotel(){
}
public void setNumerodehotel(int number){
this.hotelroomnumber.add(number);
}
public void setResidente1(String resident){
this.resident1.add(resident);
}
}
该漏洞位于Hotel类的构造函数中。您正在构建Hotel类时定义ArrayList 这类似于这样做
public abstract class Hotel {
ArrayList<Integer> numerodehotel;
ArrayList<String> residente1;
public Hotel(int number, String resident){
numerodehotel = new ArrayList<Integer>();
residente1 = new ArrayList<String>();
this.resident1.add(resident);
this.hotelroomnumber.add(number);
}
}
如您所见,每次创建接待处或新酒店时,都会创建一个新的ArrayList,然后ArrayList中只会存在一个项目
您可能只想从构造函数中删除adding,然后通过一个单独的方法进行add。请您至少发布一些编译过的代码好吗?放continue而不是break是正常的吗;在交换机里?继续创建一个whiletrue循环,之后没有任何应用程序是正常的。请格式化这个难以辨认的混乱。
public abstract class Hotel {
ArrayList<Integer> numerodehotel;
ArrayList<String> residente1;
public Hotel(int number, String resident){
numerodehotel = new ArrayList<Integer>();
residente1 = new ArrayList<String>();
this.resident1.add(resident);
this.hotelroomnumber.add(number);
}
}