我将Person
的详细信息添加到ArrayList
两次,但是当我想要打印这两个对象时,它只重复两次最终细节(并且不打印第一个)。
import java.util.ArrayList;
public class Arraylist
{
Person person = new Person();
ArrayList<Person> array = new ArrayList<>();
Person personTwo;
Person personThree;
void dataEntery(String name , int age , double marks, int itc, int pf)
{
person.addDetail(name,age,marks);
person.marksDetail(itc,pf);
array.add(person);
}
void print()
{
int index =0;
while(index<array.size()) {
personTwo = array.get(index);
System.out.println(personTwo.name);
System.out.println(personTwo.age);
System.out.println(personTwo.marks);
System.out.println(personTwo.itc);
System.out.println(personTwo.pf);
index++;
}
}
}
任何人都可以解释为什么第一次不打印以及为什么最后一次打印两次?
答案 0 :(得分:5)
您必须创建新的Person
实例,或者只需添加(并更新)相同的Person
实例(因为您只有一个引用)。
Person person = new Person(); // <-- something like this.
person.addDetail(name,age,marks);
person.marksDetail(itc,pf);
array.add(person);
答案 1 :(得分:1)
我不知道您在哪里创建person
实例,但是每次向列表添加Person
之前都必须创建一个新实例。否则,列表将多次包含相同的实例。
您看到的详细信息反映了您对该单个实例的最后修改,这是第二个Person
的详细信息。
void dataEntery(String name , int age , double marks, int itc, int pf)
{
Person person = new Person();
person.addDetail(name,age,marks);
person.marksDetail(itc,pf);
array.add(person);
}
答案 2 :(得分:0)
好的,所以我想出了另一种方法。我觉得这很愚蠢,但我刚才意识到我可以这么做:
Fish bass = new Fish("bass", 5);
fishlist.add(bass);
for (Fish fish: fishlist) {
if (fish.caught) {
fishcaughtlist.add(new Fish(fish.name, fish.weight);
}
}
所以这将添加一个新实例,只需从贝斯获取所有信息。谢谢你的帮助:)