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

使用for循环打印Java二维数组遇数组越界异常,求嵌套循环解析

数组越界异常排查与二维数组嵌套for循环解析

错误原因

你代码里的核心问题是内层for循环的增量写错了:

for(int j = 0; j < cars[i].length; i++)

这里把本该递增的j++写成了i++。每次内层循环执行时,i会被持续累加,很快就超过了二维数组的行数(你的数组有3行,索引范围是0-2)。当i变成3时,访问cars[3]就会触发ArrayIndexOutOfBoundsException——因为数组长度是3,最大合法索引是2。

修正后的代码

把内层循环的i++改成j++,同时可以调整打印语句让输出更规整:

public class Arrays2D {
    public static void main(String[] args) {
        //2D Arrays = an array in an array
        String[][] cars = {
                {"Toyota", "Mazda", "Subaru"},
                {"Ferrari", "Mercedes", "Porsche"},
                {"Tesla", "Ford", "Hyundai"}
        };
        //[how many arrays][how many elements in each array]
        
        for(int i = 0; i < cars.length; i++)
        {
            System.out.println();
            for(int j = 0; j < cars[i].length; j++) // 这里改成j++
            {
                System.out.print(cars[i][j] + ", "); // 用print代替println,避免每个元素换行
            }
        }
    }
}

嵌套for循环执行逻辑(针对二维数组)

  • 外层循环:负责遍历二维数组里的每一个一维子数组。i是子数组的索引,cars.length表示子数组的总数量(这里是3)。
  • 内层循环:负责遍历当前外层循环指向的那个子数组里的所有元素。j是元素在子数组中的索引,cars[i].length表示当前子数组的元素个数(这里每个子数组都是3个元素)。
  • 执行顺序:
    1. 外层循环先定位到第一个子数组(i=0),然后内层循环从j=0到j=2,逐个打印这个子数组的元素;
    2. 外层循环走到i=1,内层循环再遍历第二个子数组的所有元素;
    3. 重复上述步骤,直到外层循环走完所有子数组(i=2),整个循环结束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:32:15