我正在尝试将新的训练添加到我的数组列表中,但是添加训练后,新输入将覆盖数组列表的现有内容。这导致arraylist中只有一项,而不能添加更多而不会覆盖另一项。由于我不太清楚代码中此问题的根源,因此我在这里寻求帮助。
正在上这堂课的火车:
public class RCommand extends RBaseListener {
Company mycompany = new Company("traincompany");
@Override
public void enterNewtraincommand(RParser.NewtraincommandContext ctx) {
System.out.println("Now creating new train " + ctx.getText());
mycompany.addTrainTo(new Train(ctx.getChild(2).toString()));
System.out.println(mycompany.getTrains().size());
}
}
在本课程中,应该将火车添加到列表中。
public class Company{
private String name;
List<Train>trains = new ArrayList<Train>();
public void addTrainTo(Train train) {
trains.add(train);
for (Train t :trains) {
System.out.println(t.getName());
}
}
}
答案 0 :(得分:0)
只需对您的班级公司进行测试,看看是否可行
public class Test {
Company company = new Company();
public static void main(String[] args) {
Test test = new Test();
test.start();
}
private void start() {
System.out.println("IT work");
company.addTrainTo(new Train("One"));
System.out.println("End first add");
company.addTrainTo(new Train("two"));
System.out.println("End second add\n");
System.out.println("Follow example will not work");
company = new Company();
company.addTrainTo(new Train("One"));
System.out.println("End first add");
company = new Company(); // <--- create the ERROR
company.addTrainTo(new Train("two"));
System.out.println("End second add");
}
}
假设我们按原样训练:
public class Train {
private String name;
public Train(String name) {
this.name = "Train" + name;
}
public String getName() {
return name;
}
}
输出为:
IT工作
火车一号
先结束添加
火车一号
训练两个
第二秒添加(正常工作)
以下示例将不起作用
火车一号
先结束添加
训练两个
第二次添加结束<-我们错过了第一趟火车,因为我们重新创建了公司实例
这样就可以了。
因此错误不在此类Company中。
答案 1 :(得分:0)
似乎为每次添加都创建了新的“火车”对象。添加后,尝试打印“ trains”对象的地址以确保确定。您可以通过System.out.println(“火车地址为:” +火车)
打印地址答案 2 :(得分:-1)
您没有将我们所需的所有代码传递给我们,但我认为,应该使用火车清单创建Company构造函数。
类似的东西:
public class Company{
private String name;
List<Train>trains;
public Company(String name, List<Train> trains){
this.name = name;
this.trains = trains;
}
...
}
然后在您的RCommand类中使用新的Constructor
Company mycompany = new Company(new ArrayList<Train> ,"traincompany");
就可以了。您在代码中的错误是每次通过调用new
运算符来创建新的火车清单。