0

2D 配列があり、最初の行を同じサイズの別の配列にコピーするだけです。これを行う最善の方法は何ですか?私はこれを試しました:

public static int[][] buildCME(int[][] array){

    int [][] arrayCME = new int[array.length][array[0].length];


    for(int y = 1; y < array.length; y++)
    {

        for (int x = 0; x < 1; x++)
        {

            arrayCME[y][x] = array[y][x];

        }
    } 

ただし、それは最初の行に 0 を与えるだけであり、これは int の初期化に関係していると思います。この for ループを作成したのは、2D 配列全体を説明するために、通常の for ループで if ステートメントを作成するよりも簡単に説明できると考えたからです。助けてくれてありがとう!

4

2 に答える 2

5

コードは、2 行目 (外側のループは 1 から開始) から開始して、最初の列 (内側のループは x < 1) をコピーします。最初の行をコピーしたい場合は

 for (int x = 0; x < array[0].length; x++)
 {
      arrayCME[0][x] = array[0][x];
 }

これをより効率的に行うには、以下を参照してくださいSystem.arraycopy

System.arraycopy(array[0],0,arrayCME[0],0,array[0].length);

System.arraycopyネイティブメソッドであるため、より効率的なコピーを実行する必要があります。さらに、HotSpot JVM などの一部の JVM は、このメソッドを組み込みの として扱います。JVM は通常、組み込みメソッドの呼び出しをアーキテクチャ固有のコードに置き換えます。これは、arraycopyメモリを直接コピーするマシン コードの場合もあります。

于 2012-11-04T19:17:45.147 に答える
2

これは、外側のループが 0 ではなく 1 で始まり、配列が 0 で始まるため、最初の行は常に変更されないためです。

于 2012-11-04T19:04:58.177 に答える