-1

我有关于将对象分配给具有几乎相同对象的arraylist 的问题,这些对象来自另一个列表,我想将它添加到arraylist 两次,在我将它添加到另一个列表之前,我需要在这些对象中设置一个变量。

这是代码,

ArrayList<ClassCourse> courses = new ArrayList<ClassCourse>();
ArrayList<ClassCourse> _courses = new ArrayList<ClassCourse>();

int index = 0;
for( int i = 0; i < courses.size(); i++ )
{
    ClassCourse t = courses.get(i);
    if(t.getSks()==4)      
    {
        i--;
        t.setSks(2);
        t.setIndex(index); // I want to set this one
        index++;
    }
    else
    {
        t.setIndex(index); // I want to set this one
        index++;
    }
    _courses.add(t);
}

问题是当我通过打印检查列表时

for( ClassCourse t : _courses )
    System.out.println( t.getIndex() + " " + t.getName() + " " +
            t.getCourseCode() + " " + t.getSks() );

这就是我得到的

1 Visi 电脑 A 2
1 Visi 电脑 A 2
2 Matematika Diskrit C 3
4 Jaringan Nirkabel dan Komputasi Bergerak A 2
4 Jaringan Nirkabel dan Komputasi Bergerak A 2
5 Pemograman 框架 .NET A 3
6 Perancangan dan Analisis 算法 E 3
8 系统 Terdistribusi A 2
8 系统 Terdistribusi A 2
9 Matematika Diskrit D 3
11 Manajemen Proyek Perangkat Lunak A 2
11 Manajemen Proyek Perangkat Lunak A 2

我无法让索引的价值以正确的方式增加

4

1 回答 1

1
 if(t.getSks()==4)      
{
    i--;
    t.setSks(2);
    t.setIndex(index); // I want to set this one
    index++;
}

我猜你正在减少 i 以便对象被添加两次。但请记住,它与添加到列表中的对象相同。因此,当您设置 t.setIndex(index) 时,它将更改上一次迭代的 index 值。这是因为 java 只处理引用。因此,courses.get(0) 和 course.get(1) 返回对同一对象的引用,因此返回了这种行为。如果您希望索引不同,则可能需要克隆对象并将其再次添加到列表中。您需要仔细考虑并决定是否需要该对象的另一个副本。

于 2012-04-23T05:40:30.723 回答