2014-03-30 47 views
0

请告诉我如何纠正问题?我在while循环的集合中添加了相同的对象,并且它复制了数据。从循环中保存收集对象

public class CollectionsFramework { 
    private String name; 
    private int id; 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

    private List<CollectionsFramework> listOfString = new ArrayList(); 

    public void setListOfString(List<CollectionsFramework> listOfString) { 
     this.listOfString = listOfString; 
    } 
    public List<CollectionsFramework> getListOfString() { 
     return listOfString; 
    } 


    public static void main(String[] args) { 
     CollectionsFramework c = new CollectionsFramework(); 
     int i = 0; 
     while(i<5) { 

      c.setId(1+i); 
      c.setName("abc" + i); 

      c.print(); 

      c.getListOfString().add(c); 

      i++; 

     } 

     for (CollectionsFramework c1 : c.getListOfString()) { 
      System.out.println(c.print()); 
     } 


    } 

    private String print() { 

     return this.getName() + " " + this.getId() + ";"; 
    } 

} 

为此,我得到的输出为: abc4 5; abc4 5; abc4 5; abc4 5; abc4 5;

虽然它应该是: abc0 1; abc1 2; abc2 3; abc3 4; abc4 5;

回答

1

您每次在循环中都使用相同的对象,并且每次覆盖它的值时,它都会打印出设置的最后一个值。

因此,尝试每次在while循环内声明一个新对象。

while(i<5) { 
    CollectionsFramework c = new CollectionsFramework(); 
    // code. 
}