1

我想从java中的一维数组创建一个多维数组。

我的一维数组就像

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

我想在运行时创建一个 3x3 维度的矩阵,因为这个数组中有 9 个元素。任何人都可以为此提出一些好主意。谁能建议我在下面的代码中应该做什么,以便它可以给我 3 个数组的数组列表,或者如果有人可以建议我一些更好的想法来正确执行此操作。我知道下面的代码有错误。

         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 回答