1

Javaで一次元配列から多次元配列を作りたいです。

私の一次元配列は

  int[] grid = {5, 3, 1, 2, 0, 4, 1, 1, 3 };

この配列には 9 つの要素があるため、実行時に 3x3 次元のマトリックスを作成したいと考えています。誰でもこれについて良いアイデアを提案できますか。3つの配列のarraylistを取得できるように、または誰かがこれを正しく実行するためのより良いアイデアを提案できるかどうか、以下のコードで何をすべきかを誰かに提案できますか? 以下のコードにエラーがあることはわかっています。

         ArrayList<int[]> matrix = new ArrayList<>();
    int[] tempArray = new int[n];
    int j = 0;
    for(int i=0 ; i<=grid.length; i++){         

        if((i+1) / 3 == 0){         
            matrix.add(tempArray);
            j=0;
        }else{          
            tempArray[j] = grid[i];
            j++;
        }
    }   

ありがとう

4

3 に答える 3

4

Java は多次元配列をネイティブに処理します。で配列を使用して独自に作成する必要はありませんArrayList

このようなものは、あなたが望むものを与えるはずです:

int[] grid = {5, 3, 1, 2, 0, 4, 1, 1, 3 };
int [][] matrix = new int[3][3];

for (int x = 0; x < 3; x++) {
  for (int y = 0; y < 3; y++) {
    matrix[x][y] = grid[x + y * 3];
  }   
}
于 2012-06-09T06:58:31.847 に答える
0

反復が配列から離れすぎています。grid.length値は 9 で、最大のインデックスは 8 です。終了条件を長さよりも厳密に短くするように変更してください。

また、新しい配列をArrayList. マトリックスを追加した後、次の新しいインスタンスを作成することをお勧めしますtempArray

matrix.add(tempArray);
tempArray = new int[n];
j++;

jいくつかの要素を再度追加する準備ができたときに 0 にリセットしないでください。ArrayListこれにより、最初の場所に戻ります。自動インクリメントと同じ問題-意図したよりもさらに進んでいる可能性がiあることに注意する必要があります。i

最後に、そのように分割する代わりにモジュラス演算子を使用することをお勧めします。モジュロは同じように機能し、読みやすくなります。

if(i % 3 == 0) { // Analogous to adding one and dividing by 3.
于 2012-06-09T06:55:30.223 に答える
0
public class sample {
public static void main(String args[])
  {
    int[] grid = {5, 3, 1, 2, 0, 4, 1, 1, 3 };
    int i=0,j=0;
    int count=-1;int k;
    int[][] arr=new int[3][3];

    for(i=0;i<3;i++)
    {
     count++;
      for(j=0;j<3;j++)
      {

          if(count == 0)
          {
              k=j;
              arr[i][j]=grid[k];
          }

          if(count == 1)
          {
              k=j+3;
               arr[i][j]=grid[k];
          }
          if(count == 2)
          {
              k=j+6;
               arr[i][j]=grid[k];
          }
     }

    }


   for(i=0;i<3;i++)
   {
    for(j=0;j<3;j++)
    {

        System.out.print(arr[i][j]+" ");
    }
    System.out.println(" ");
    }

  }
}
于 2012-06-09T07:22:09.857 に答える