0

だから私は数字のグループをシャッフルする方法を作成しています。アイデアは、これらの数字の母集団を作成することです。したがって、数値をシャッフルしてから配列リストに追加するループを作成しますが、いくつかのデバッグステートメントの後、数値をシャッフルするが、最後のシャッフルをarrayListに追加するだけであることがわかりました。誰でも理由を理解するのを手伝ってもらえますか?

solutionList は、誰かが疑問に思っている場合、コードのさらに上の配列リストです

for(int k =0;k <100; k++){
        Collections.shuffle(solutionList);
        population2.add(new Object[]{solutionList}) ;
        System.out.println("In the loop  " + solutionList);

    }

    for(Object[] row : population2){
        System.out.println("Row = " + Arrays.toString(row));
    }
4

3 に答える 3

9

の各要素は、同じpopulation2を参照する配列です。別のリストが必要な場合は、反復ごとに新しいリストを作成する必要があります。 ArrayList

たとえば、リストに毎回正しい番号が入力されないようにするには、シャッフルしてからコピーsolutionListへの参照を追加します。

for (int k = 0; k < 100; k++) {
    Collections.shuffle(solutionList);
    List<Integer> copy = new ArrayList<Integer>(solutionList);
    population2.add(new Object[]{ copy });
}
于 2012-06-25T16:33:04.620 に答える
3
population2.add(new Object[]{solutionList}) ;

単一の要素でオブジェクト配列を作成します。その要素はたまたまリストです。

于 2012-06-25T16:33:15.720 に答える
2

それぞれが同じリストへの参照を含む 100 個の配列を作成しています。あなたが望むのは、それぞれがリストの要素のコピーを含む100個の配列を作成することだと思います:

for(int k =0;k <100; k++){
    Collections.shuffle(solutionList);
    population2.add(solutionList.toArray()) ;
}

ただし、配列を完全に避け、常にコレクションを使用することをお勧めします。

for(int k =0;k <100; k++){
    Collections.shuffle(solutionList);
    population2.add(new ArrayList<Something>(solutionList));
}
于 2012-06-25T16:35:25.560 に答える