-1

ほぼ同じオブジェクトを持つarraylistにオブジェクトを割り当てることについて質問があります。オブジェクトは、arraylistに2回追加したい別のリストからのものであり、別のリストに追加する前に、それらのオブジェクトに変数の値を設定する必要があります。

このコード、

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 Komputer A 2
1 Visi Komputer 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 Framework .NET A 3
6 Perancangan dan Analisis Algoritma E 3
8 Sistem Terdistribusi A 2
8 Sistem 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++;
}

オブジェクトが2回追加されるように i をデクリメントしていると思います。ただし、リストに追加されるのは同じオブジェクトであることに注意してください。したがって、t.setIndex(index) を設定すると、前の反復の index の値が変更されます。これは、Java が参照のみを扱うためです。したがって、 course.get(0) と course.get(1) は同じオブジェクトへの参照を返すため、この動作になります。インデックスを変更したい場合は、オブジェクトを複製してリストに再度追加する必要があります。これをよく考えて、オブジェクトの別のコピーが必要かどうかを判断する必要があります。

于 2012-04-23T05:40:30.723 に答える