我有一个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;}
答案 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
,
使用i
,j
和m
计算正确的位置:
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
ret[i][j] = integers.get(i * m + j);
}
}