You need to enable JavaScript to run this app. Java打印二维boolean数组输出[[Z@哈希值问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Java打印二维boolean数组输出[[Z@哈希值问题排查

问题成因
  • 直接输出哈希格式的核心原因:Java中所有数组都是继承自Object的对象,直接将数组引用传入System.out.print()时,默认会调用Object类的原生toString()方法,该方法的输出规则为数组类型编码@对象内存哈希值。你看到的[[Z@6d06d69c就是这个规则的产物:两个[代表二维数组层级,Z代表数组元素是boolean基本类型,后面的十六进制字符串是对象的内存地址哈希,完全不会输出数组内部存储的元素内容。
  • 查阅同类问题仍无法解决的常见原因:很多教程提到使用Arrays.toString()打印数组,但该方法仅适用于一维数组。对二维数组执行Arrays.toString()时,只会遍历最外层的一维元素,每个元素本质还是一维boolean数组,依然会输出哈希格式的内容,无法达到预期效果。
  • 附带的代码逻辑问题(即便修正打印逻辑也会导致代码无法正常运行):
    • 构造方法Main(int rows, int cols)仅定义了2个入参,但main方法中调用构造方法时传入了3个参数new Main(6, 8, 10),存在参数个数不匹配的编译错误。
    • Board()方法的随机障碍物生成逻辑完全写反:boolean数组默认初始值全为false,但代码中判断“如果坐标位置为true就设为false”,该分支永远不会触发,循环内的自增变量i永远达不到终止条件,会直接造成死循环。
    • 随机坐标的范围与数组维度不匹配:原代码中随机生成的x范围是0到cols-1、y范围是0到rows-1,但二维数组的第一维长度是rows、第二维长度是cols,存在数组越界的风险。
解决方法

1. 修正数组打印逻辑

对于二维嵌套结构的数组,使用JDK内置的Arrays.deepToString()方法递归遍历所有层级的数组元素,完成内容输出。具体操作:

  • 导入java.util.Arrays工具类
  • 将原打印语句System.out.print(m.Obstacle)替换为:
    System.out.println(Arrays.deepToString(m.Obstacle));
    
    输出效果为直接展示数组所有元素值,格式类似[[false, true, false...], [false, false, true...]]。

如果需要更灵活的自定义排版(比如将true标记为障碍物、false标记为通路),可以通过双层循环遍历数组逐行输出,示例代码:

// 逐行遍历二维数组
for (boolean[] row : m.Obstacle) {
    for (boolean cell : row) {
        // 自定义单元格显示内容
        System.out.print(cell ? "■ " : "□ ");
    }
    // 每行输出完成后换行
    System.out.println();
}

2. 修正原有代码的逻辑错误

  • 匹配构造方法的入参与调用参数:要么将main方法中构造方法调用的参数调整为和定义一致的2个值,要么补充构造方法的入参定义,保证参数数量、类型匹配。
  • 修正障碍物生成的判断逻辑:将原判断条件反向,在随机坐标未被设置过障碍物时,将其标记为true并累计计数,直到生成指定数量的障碍物为止;同时调整随机数的范围匹配数组的维度长度,避免数组越界。修正后的核心方法参考:
    import java.util.Random;
    
    public void Board() {
        int obstacleCount = 0;
        Random r = new Random();
        // 循环生成5个障碍物
        while (obstacleCount < 5) {
            // 随机坐标匹配数组的行、列长度
            int rowIdx = r.nextInt(this.rows);
            int colIdx = r.nextInt(this.cols);
            // 仅当当前位置未设置障碍物时才标记,避免重复占用位置
            if (!Obstacle[rowIdx][colIdx]) {
                Obstacle[rowIdx][colIdx] = true;
                obstacleCount++;
            }
        }
    }
    

内容的提问来源于stack exchange,提问作者pln

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 18:27:05