Java二维数组填充(Arrays.fill)的使用

在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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值