我正在尝试打印添加到链接列表的对象的内容。在这段代码中我的预期o / p是:100 20 300但是我得到:300 300 300.我哪里出错?
import java.util.*;
import java.lang.*;
import java.io.*;
class Body{
int i;
public void setB(int i){
this.i = i;
}
}
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Body b = new Body();
Body bdum;
LinkedList<Body> l = new LinkedList<Body>();
b.setB(100);
l.add(b);
b.setB(20);
l.add(b);
b.setB(300);
l.add(b);
Iterator<Body> li = l.iterator();
System.out.println(l.size());
System.out.println("List is:");
while(li.hasNext()){
bdum = li.next();
System.out.println(bdum.i);
}
}
}
答案 0 :(得分:3)
问题在于:
b.setB(100);
l.add(b);
b.setB(20);
l.add(b);
b.setB(300);
l.add(b);
您在变量b
上使用相同的对象引用。您至少应该创建一个新的对象引用并分配值,然后将其添加到列表中。
可能的解决方案可能是:
b.setB(100);
l.add(b);
b = new Body();
b.setB(20);
l.add(b);
b = new Body();
b.setB(300);
l.add(b);
另一种解决方案可能是在您的班级中使用构造函数,在i
类中设置Body
字段:
class Body{
int i;
//added for compatibility with current code
public Body() {
}
public Body(int i) {
setB(i);
}
public void setB(int i){
this.i = i;
}
}
然后在您的班级中,您只需直接添加Body
的新实例:
//b.setB(100);
l.add(new Body(100));
//b.setB(20);
l.add(new Body(200));
//b.setB(300);
l.add(new Body(300));
答案 1 :(得分:3)
您创建一个Body
对象并将其添加到列表中三次。您应该创建三个不同的对象。那就是:
b.setB(100);
l.add(b);
b = new Body();
b.setB(20);
l.add(b);
b = new Body();
b.setB(300);
l.add(b);
答案 2 :(得分:1)
在此代码中:
Body b = new Body();
Body bdum;
LinkedList<Body> l = new LinkedList<Body>();
b.setB(100);
l.add(b);
b.setB(20);
l.add(b);
b.setB(300);
l.add(b);
您可能认为已向LinkedList
添加了3个项目,但实际上只有一个项目被添加到List中,因为您多次重复使用相同的对象引用。
答案 3 :(得分:1)
您正在更改b
的同一实例上的值。您需要创建不同的实例并设置值,如:
Body b1 = new Body();
b1.setB(100);
l.add(b1);
Body b2 = new Body();
b2.setB(20);
l.add(b2);
Body b3 = new Body();
b3.setB(300);
l.add(b3);