2017-12-10 11 views
0

私は常にグローバル配列の値を変更する必要があるプログラムに取り組んでいます。Tmp初期値のコピー[グローバル配列の]

このグローバル配列のコピーを使用する必要がありますが、コピーにはグローバル配列の最初の初期値のみが含まれている必要があります。 誰もこのようなtmp配列を初期化する方法を教えてもらえますか?

int[][] copy = int [][] global; 

が動作しません。

+0

int [] [] copy = int [] [] global; 'はJavaコードではありません。それは何をすべきか?そして、「グローバル配列の初期値」はどういう意味ですか?その間に戻ってくることはできず、その間に配列にない値を取得することはできません。 –

+0

一般的に、グローバル配列は、最初に各列で、次に各行でスキャンするマップです。オブジェクトを取得した場合、いくつかの条件が適用されます。グローバル[2] [1]では、このオブジェクトを別の(ランダムな)場所に移動します。それにもかかわらず、このオブジェクトが次のフィールド(グローバル[2] [2])に移動すると、私は同じオブジェクトを再度スキャンします。これは避けたいものです。したがって、何も移動されていないグローバル配列のコピーが必要です。次に、コピーをスキャンし、グローバル配列内のオブジェクトのみを移動できます。 – K2K

答えて

0

ディープコピーが必要です。

あなたの配列は、単純型(例えばint型。)が含まれている場合:

static int[][] global = {{1, 2}, {3, 4}, {5, 6}}; 

public static void main(String[] args) { 
     int[][] copy = new int[global.length][]; 
     for (int i = 0; i < global.length; ++i) { 
      copy[i] = Arrays.copyOf(global[i], global[i].length); 
     } 
    } 

あなたの配列が複合型(いくつかのオブジェクト)が含まれている場合、次のいずれかの方法でコピーコンストラクタです: `

static class Foo { 
     private int x; 

     public Foo(int x) { 
      this.x = x; 
     } 

     public Foo(Foo other) { 
      this.x = other.x; 
     } 
    } 

    static Foo[][] global = {{new Foo(1), new Foo(2)}, {new Foo(3), new Foo(4)}, {new Foo(5), new Foo(6)}}; 

    public static void main(String[] args) { 
     Foo[][] copy = new Foo[global.length][]; 
     for (int i = 0; i < global.length; ++i) { 
      copy[i] = new Foo[global[i].length]; 
      for (int j = 0; j < copy[i].length; ++j) { 
       copy[i][j] = new Foo(global[i][j]); 
      } 
     } 
    } 
+0

ちょっとlukas、 アイデアのために感謝します。 問題は、メインにリンクされている特定のメソッドからメインと唯一のワークを使用することができないということです。 私はもちろん "ヘルプメソッド"でも同じことができますが、プログラムはインタラクティブなので(再帰で)、プログラムの各ステップごとに新しいコピー(新しい値とともに)を取得すると思います。 – K2K

+0

これまでのところ、私は問題が本当に何であるか分からないので、いくつかのコードを提供してください。私の例では、グローバル配列は変更されません - どのメソッドからでもアクセスできる静的配列です。 – lukascode

+0

残念ながら、私は大学のためにこのコードを手渡さなければならないので、何も公開していません。ウェブのための何らかの検索ツールで盗作をチェックします。 – K2K