1

私はこの小さなプロジェクトに参加していて、コードの主要な問題を(運も結果もなしに)解決するのに20時間ほど費やしています。今、私は、copy()関数が正しく機能しないことが本当の問題であることに気付いたところです。

私は何が間違っているのですか?

これは私が特定の問題について作った例です:

package cloneobject;

import java.util.Arrays;

public class CloneObject {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        clone(new int[3][3]);
    }

    public static void clone(int[][] x) {
        int[][] y = (int[][]) x.clone();
        System.out.println("x=");
        PrintFieldImage(x);
        System.out.println("y=");
        PrintFieldImage(y);
        x[1][1] = 3;        
        System.out.println("x=");
        PrintFieldImage(x);
        System.out.println("y=");
        PrintFieldImage(y);
        y[2][2] = 4;
        System.out.println("x=");
        PrintFieldImage(x);
        System.out.println("y=");
        PrintFieldImage(y);
    }

    public static void PrintFieldImage(int[][] field) {
        if (field != null) {
            int x;
            for (x = 0; x < field.length; x++) {
                System.out.println(Arrays.toString(field[x]));
            }
        } else {
            System.out.println("no field!");
        }
    }
}

そしてこれは結果です:

run:
x=
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
y=
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
x=
[0, 0, 0]
[0, 3, 0]
[0, 0, 0]
y=
[0, 0, 0]
[0, 3, 0]
[0, 0, 0]
x=
[0, 0, 0]
[0, 3, 0]
[0, 0, 4]
y=
[0, 0, 0]
[0, 3, 0]
[0, 0, 4]
BUILD SUCCESSFUL (total time: 0 seconds)

ここで、xに3を含め、yに4を含めたいと思います。

Plzヘルプ!

4

1 に答える 1

7

clone()浅いクローンのみを実行します。2Dアレイのクローンを作成しています。配列の配列。トップレベルのアレイのみが複製されます。ディープクローンを作成する場合は、昔ながらforのループを使用する必要があります。

int[][] y = new int[x.length][];
for(int i=0; i<x.length; i++) {
    y[i] = x[i].clone();
}

Javaで2D配列をコピーするも参照してください。

于 2013-01-29T19:51:29.290 に答える