从ArrayList <integer>创建一个二维数组

时间:2016-11-12 20:19:41

标签: java arrays 2d

我有一个ArrayList,我想创建一个方法,将其转换为2d数组,int [] []。 这个新的2d数组将代表一个矩阵,它必须是方形的,所以例如,如果我使用[8,2,3,0],则ressult将为{8,2}                                                   {3,0}

public static int[][] convertIntegers(ArrayList<Integer> integers){
        int m = (int) Math.sqrt(integers.size());
        int[][] ret = new int[m][m];

        int cont = 0;

        for(int i=0; i<m+1 ; i++)
       {
           for(int j=0; j<m; j++)
           {
               cont = cont + 1;
               ret[i][j] = integers.get(cont);
               ;
           }
       }
       return ret;}

1 个答案:

答案 0 :(得分:3)

除了一些 off-by-one 错误之外,你的实现几乎没问题:

  • 您必须在cont电话后增加integers.get,之前。如果之前增加,则将跳过列表的第一个元素。解决这个问题的一种简单方法是在内循环中移动递增,并将其与j一起计算。
  • 外部循环应该转到i < m而不是i < m + 1

修正了错误:

for (int i = 0, cont = 0; i < m; i++) {
  for (int j = 0; j < m; j++, cont++) {
    ret[i][j] = integers.get(cont);
  }
}

顺便说一句,另一种方法是完全不使用cont, 使用ijm计算正确的位置:

for (int i = 0; i < m; i++) {
  for (int j = 0; j < m; j++) {
    ret[i][j] = integers.get(i * m + j);
  }
}