You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用双层for循环遍历二维数组输出姓名对且不捕获数组越界异常?

嘿,刚学Java就能想到用异常来解决问题已经很不错啦!不过用异常来控制程序流程确实不是最佳实践,咱们可以调整循环的逻辑,完全避免数组越界的情况,而且依然用双层for循环实现~

先说说你原来代码的问题:你的二维数组只有2行(索引0是名字,索引1是姓氏),但外层循环遍历了ladrones2.length(也就是2次),当循环到i=1的时候,i+1=2就超出了数组的索引范围(数组最大索引是1),所以才会抛出ArrayIndexOutOfBoundsException,你靠捕获这个异常来终止程序,虽然能得到正确结果,但逻辑上有点“投机取巧”。

下面给你几种更合理的实现方式:

方式一:限定外层循环只处理第一行

因为我们明确知道第一行是名字,第二行是姓氏,所以外层循环只需要运行一次(只处理索引0的行),内层循环遍历该行的每个元素,然后直接配对第二行的对应位置元素:

public static void robo2() {
    String[][] ladrones2 = { {"Phil", "Kim", "Phil", "Perry"}, {"Garcia", "Gimena", "Basinger", "Ornitorrinco"}};
    
    // 外层循环只处理第一行(索引0),避免i+1越界
    for (int i = 0; i < 1; i++) {
        // 内层循环遍历第一行的每个元素索引
        for (int j = 0; j < ladrones2[i].length; j++) {
            System.out.println("name: " + ladrones2[i][j] + " " + ladrones2[i + 1][j]);
        }
    }
}

方式二:通用化外层循环边界

如果以后你的数组可能有更多行(比如增加中间名),可以让外层循环只运行到倒数第二行,这样i+1永远不会超出数组的最大索引:

public static void robo2() {
    String[][] ladrones2 = { {"Phil", "Kim", "Phil", "Perry"}, {"Garcia", "Gimena", "Basinger", "Ornitorrinco"}};
    
    // 外层循环只到倒数第二行,保证i+1不会越界
    for (int i = 0; i < ladrones2.length - 1; i++) {
        for (int j = 0; j < ladrones2[i].length; j++) {
            System.out.println("name: " + ladrones2[i][j] + " " + ladrones2[i + 1][j]);
        }
    }
}

方式三:按列遍历拼接(更通用)

如果想让代码适配更多行的情况(比如3行:名字、中间名、姓氏),可以改成按列遍历,内层循环遍历每行的元素进行拼接:

public static void robo2() {
    String[][] ladrones2 = { {"Phil", "Kim", "Phil", "Perry"}, {"Garcia", "Gimena", "Basinger", "Ornitorrinco"}};
    
    // 取第一行的列数(假设所有行的列数一致)
    int columnCount = ladrones2[0].length;
    // 外层循环遍历每一列(每一列对应一个完整姓名)
    for (int j = 0; j < columnCount; j++) {
        StringBuilder fullName = new StringBuilder();
        // 内层循环遍历当前列的所有行元素
        for (int i = 0; i < ladrones2.length; i++) {
            if (i != 0) {
                fullName.append(" ");
            }
            fullName.append(ladrones2[i][j]);
        }
        System.out.println("name: " + fullName);
    }
}

这几种方式的核心都是用数组的length属性或者明确的边界来控制循环范围,确保不会访问超出数组索引的位置,自然就不需要捕获异常啦。

内容的提问来源于stack exchange,提问作者Samuel Van Bladel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:12:52