杰瑞科技汇

Java如何输出二维数组?

使用 Arrays.deepToString() (最推荐)

这是最简单、最直接的方法,专门用于处理多维数组或包含其他数组的数组,它会自动为你生成一个格式良好、易于阅读的字符串表示,包括嵌套的方括号。

Java如何输出二维数组?-图1
(图片来源网络,侵删)

特点:

  • 简单快捷:一行代码搞定。
  • 格式清晰:输出结果直观,适合调试和打印。
  • 通用性强:可以处理任意维度的数组(三维、四维等)。

示例代码:

import java.util.Arrays;
public class PrintNestedArray {
    public static void main(String[] args) {
        // 定义一个二维数组(数组的数组)
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        // 使用 Arrays.deepToString() 输出
        System.out.println("使用 deepToString() 输出:");
        System.out.println(Arrays.deepToString(matrix));
    }
}

输出结果:

使用 deepToString() 输出:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

使用嵌套的 for 循环 (最灵活)

如果你需要对每个元素进行更复杂的处理,或者希望自定义输出格式(换行、添加分隔符等),嵌套的 for 循环是最佳选择。

Java如何输出二维数组?-图2
(图片来源网络,侵删)

特点:

  • 完全控制:可以访问并操作每一个单独的元素。
  • 格式自定义:可以自由控制输出的样式。
  • 代码稍多:需要手动编写循环逻辑。

示例代码:

public class PrintNestedArrayWithLoops {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        System.out.println("使用嵌套 for 循环输出:");
        // 外层循环遍历每一个一维数组(行)
        for (int i = 0; i < matrix.length; i++) {
            // 内层循环遍历一维数组中的每一个元素(列)
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " "); // 使用 print 不换行
            }
            System.out.println(); // 每行结束后换行
        }
    }
}

输出结果:

使用嵌套 for 循环输出:
1 2 3 
4 5 6 
7 8 9 

使用 Arrays.toString() + 循环 (不推荐用于多维数组)

初学者可能会误以为 Arrays.toString() 可以用于多维数组,但实际上它不能正确处理嵌套数组,它只会调用嵌套数组的 toString() 方法,而这个方法返回的是内存地址(如 [I@1b6d3586),而不是数组的内容。

Java如何输出二维数组?-图3
(图片来源网络,侵删)

特点:

  • 错误用法:对于多维数组,输出结果无意义。
  • 仅适用于一维数组

示例代码(演示错误用法):

import java.util.Arrays;
public class PrintNestedArrayIncorrect {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        System.out.println("错误地使用 Arrays.toString():");
        // 这只会输出外层数组的 "字符串表示",而不是内容
        System.out.println(Arrays.toString(matrix));
    }
}

错误的输出结果:

错误地使用 Arrays.toString():
[[I@1b6d3586, [I@4554617c, [I@1c20c682]

可以看到,这完全不是我们想要的结果,请记住:对于多维数组,永远使用 Arrays.deepToString()


总结与对比

方法 优点 缺点 适用场景
Arrays.deepToString() 简单、快速、格式清晰 输出格式固定,无法自定义 调试、快速打印、绝大多数日常使用场景
嵌套 for 循环 灵活、可自定义格式、可操作元素 代码较多,需要手动管理循环 需要对每个元素进行特殊处理,或需要特定输出格式时
Arrays.toString() - 对多维数组无效,输出无意义 仅用于一维数组的打印

进阶:处理不规则数组(锯齿数组)

数组的每个子数组长度可能不同(即“锯齿数组”),上述方法依然适用,但在使用 for 循环时,你需要确保使用 matrix[i].length 来获取每一行的长度。

示例代码:

import java.util.Arrays;
public class printJaggedArray {
    public static void main(String[] args) {
        // 定义一个不规则的二维数组
        int[][] jaggedArray = {
            {1, 2, 3, 4},
            {5, 6},
            {7, 8, 9}
        };
        System.out.println("使用 deepToString() 输出不规则数组:");
        System.out.println(Arrays.deepToString(jaggedArray));
        System.out.println("\n使用嵌套 for 循环输出不规则数组:");
        for (int i = 0; i < jaggedArray.length; i++) {
            // 关键:使用 jaggedArray[i].length 获取当前行的长度
            for (int j = 0; j < jaggedArray[i].length; j++) {
                System.out.print(jaggedArray[i][j] + " ");
            }
            System.out.println();
        }
    }
}

输出结果:

使用 deepToString() 输出不规则数组:
[[1, 2, 3, 4], [5, 6], [7, 8, 9]]
使用嵌套 for 循环输出不规则数组:
1 2 3 4 
5 6 
7 8 9 

最终建议

  • 如果你只是想快速查看数组的内容,用于调试或日志输出,请毫不犹豫地使用 Arrays.deepToString(),这是最标准、最安全的方法。
  • 如果你需要控制输出的每一个细节(比如美化表格、在特定条件下打印等),或者需要对数组元素进行计算,那么请使用嵌套的 for 循环
分享:
扫描分享到社交APP
上一篇
下一篇