2

私はJavaに比較的慣れていないため、問題が発生しています。私は 3D を持っており、ArrayListこのアイテムをArrayListメソッドに送信して変更します。しかし、これは 3d の他の項目を変更するようArrayListです。

そこで、マトリックスを作成し、ArrayList<ArrayList<ArrayList<Integer>>>各項目を出力します。

for(int i =0; i<solutionsMatrix.size(); i++)
{
    //System.out.println(i);
    System.out.println(solutionsMatrix.get(i));
}

次に、この 3dArrayListを別のメソッドに送信します。各 subMatrix (i) が変更される場所。しかし、これを何らかの方法で行うと、行列 (i) の変更によって、他の (非 i) 行列も変更されます。

private ArrayList<ArrayList<ArrayList<Integer>>> siftSolutions(ArrayList<ArrayList<ArrayList<Integer>>> solutionsMatrix)
{
    for(int n=0; n<solutionsMatrix.size();n++){
    //System.out.println(solutionsMatrix.get(n));
    ArrayList<ArrayList<Integer>> currentMatrix = mirrorMatrix(solutionsMatrix.get(n));
    System.out.println(currentMatrix);
}

問題は、印刷されたマトリックス (2 番目のコード ブロックのコメント アウトされた部分) が、最初のコード ブロックの印刷されたマトリックスと一致しないことです。私はコードをいじって、メソッドmirrorMatrixが何らかの形で 3d マトリックスを変更していると判断しましたsolutionsMatrix

public ArrayList<ArrayList<Integer>> mirrorMatrix(ArrayList<ArrayList<Integer>> unmirrored) {
    //every value of ij needs to equal ji, thus simply transmit all non-zeros
    ArrayList<ArrayList<Integer>> mirror = new ArrayList<ArrayList<Integer>>(unmirrored);
    for (int i = 0; i < mirror.size(); i++) {
        for (int j = 0; j < mirror.size(); j++) {
            if (mirror.get(i).get(j) != 0) {
                mirror.get(j).set(i, mirror.get(i).get(j));
            }
        }
    }
    return mirror;
}

オンラインで回答を検索しようとしましたが、説明が見つかりませんでした (これは単に、問題を適切に説明するための適切な用語を知らないことが原因である可能性があります)。問題を解決して今後回避できるように、誰かがなぜこれが起こっているのかを説明してくれることを願っています.

4

1 に答える 1