在Java中,尝试使用Arrays.fill()方法填充二维数组会导致ArrayStoreException。原因是fill方法适用于一维数组,而不是二维数组。解决方法是使用双重循环手动填充。博客中提到了两种错误想法,包括试图用一层循环填充二维数组以及直接赋值给多维数组元素。正确的做法是通过两个嵌套循环逐个元素填充。
错误示范:
public static void main(String[] args) {
int[][] map=new int[4][5];//创建二维数组
int[] ten=new int[5];//创建一维数组
Arrays.fill(ten, 0);//填充一维数组
Arrays.fill(map,ten); //使用一维数组填充二维数组
System.out.println(Arrays.deepToString(map));
map[0][1] = 2;
System.out.println(Arrays.deepToString(map));
}
错误结果:
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[0, 2, 0, 0, 0], [0, 2, 0, 0, 0], [0, 2, 0, 0, 0], [0, 2, 0, 0, 0]]
可以看到,使用这种赋值方式,修改一行,其他行的都会改变,因为每一行都是相同一维数组的引用,因此是错误的!(感谢评论区用户 m0_51692493 指出错误,非常感谢)
正确的方式应该是使用两层嵌套循环进行填充
正确示范:
public static void main(String[] args) {
int[][] map=new int[4][5];//创建二维数组
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
map[i][j] = 0;
}
}
System.out.println(Arrays.deepToString(map));
map[0][1] = 2;
System.out.println(Arrays.deepToString(map));
}
正确结果:
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[0, 2, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
这样就可以进行二维数组的填充了,快在练习题里试试吧!(洛谷P2615)