2012-05-11 61 views
1

400個の整数を含む配列を取って20×20の2次元配列に分割しようとしています。私は正しいアルゴリズムがあると思ったが、1-D配列の合計は2-D配列の合計と一致しないので、明らかに何か間違っている。ここに私のコードです:1次元配列を2次元配列に変換する

private static void processArray(int[] inArray) 
{ 
    int[][] array = new int[20][20]; 

    for (int x = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
      for (int z = 0; z < 400; z++) 
      { 
       array[x][y] = inArray[z]; 
      } 
     } 
    } 
} 

私は間違っていますか?

答えて

2

入力配列の最後の要素を出力配列のすべての要素に割り当てます。入力配列の内部ループは、正しい入力要素を選択する単一の代入に変更する必要があります。 xyのペアごとに

private static void processArray(int[] inArray) 
{ 
    int[][] array = new int[20][20]; 

    for (int x = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
      array[x][y] = inArray[x * 20 + y]; // or devise your own calculation 
     } 
    } 
} 
+0

おかげのような何かをするだろう!私は数分で受け入れるだろう:) –

3

は、あなたのコードはinArrayarray[x][y]からすべての値を割り当てます。これは明らかに間違っています。ここ

は、コードを修正する一つの方法である:

private static void processArray(int[] inArray) 
{ 
    int[][] array = new int[20][20]; 

    for (int x = 0, z = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
      array[x][y] = inArray[z++]; 
     } 
    } 
} 
2

現在のアプローチは、元の最後の要素と、配列の各要素を割り当てます。

zを反復しないでくださいが、同じループ内でカウンターとして使用しないでください。

int z = 0; 
for (int x = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
       array[x][y] = inArray[z++]; 
     } 
    } 
1

あなたは基本的に、その後InArrayバリに等しい配列[X] [Y] [0]、InArrayバリ[400]に[1]、次いでInArrayバリ[2]は、すべての方法を代入しています。

私は

private static void processArray(int[] inArray) 
{ 
    int[][] array = new int[20][20]; 

    for (int x = 0; x < 20; x++) 
    { 
     for (int y = 0; y < 20; y++) 
     { 
      array[x][y] = inArray[x * 20 + y]; 
     } 
    } 
} 
関連する問題