我有一个常量 2d int 数组,声明为:
int blocked[][] = new int[][] { { 0, 4 }, { 2, 2 }, { 3, 1 }, { 3, 3 } };
但是,我想做的是动态生成精确的数组。所以我创建了一个数组列表,我在其中分别添加每个整数,0,4,2,3 ... N。然后我使用 for 循环进入 arraylist 并创建一个二维数组。但不知何故,我就是无法让它工作。我不知道我哪里做错了。
ArrayList<Integer> blocklist = new ArrayList<Integer>();
int blocked[][];
blocklist.add(0);
blocklist.add(4);
blocklist.add(2);
blocklist.add(2);
blocklist.add(3);
blocklist.add(1);
blocklist.add(3);
blocklist.add(3);
blocked = new int[blocklist.size()][2];
for(int i=0; i+2 < blocklist.size(); i++){
blocked[i][0] = blocklist.get(i);
blocked[i][1] = blocklist.get(i+1);
}
for(int i=0;i<blocked.length;++i){
System.out.print(blocked[i][0]);
}
当我做 Arrays.deepToString(blocked);
我得到 [[0, 0], [4, 4], [2, 2], [2, 2], [3, 3], [1, 1], [3, 3], [3 , 3]]
但它应该是 [[0, 4], [2, 2], [3, 1], [3, 3]]
最佳答案
ArrayList<Integer> blocklist = new ArrayList<Integer>();
int blocked[][];
blocklist.add(0);
blocklist.add(4);
blocklist.add(2);
blocklist.add(2);
blocklist.add(3);
blocklist.add(1);
blocklist.add(3);
blocklist.add(3);
blocked = new int[(blocklist.size()/2)][2];
for (int i = -1, j = 0,k=0; k < blocklist.size(); j++) {
blocked[j][0] = blocklist.get(++i);
blocked[j][1] = blocklist.get(++i);
k+=2;
}
for (int i = 0; i <(blocklist.size()/2);i++) {
for (int j = 0; j < 2; ++j) {
System.out.print(blocked[i][j]);
}
}
System.out.println();
String deepToString = Arrays.deepToString(blocked);
System.out.println("string: "+deepToString);
output:
04223133
string: [[0, 4], [2, 2], [3, 1], [3, 3]]
关于java - 从 arraylist 创建二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316833/