使用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个元素)。 - 执行顺序:
- 外层循环先定位到第一个子数组(i=0),然后内层循环从j=0到j=2,逐个打印这个子数组的元素;
- 外层循环走到i=1,内层循环再遍历第二个子数组的所有元素;
- 重复上述步骤,直到外层循环走完所有子数组(i=2),整个循环结束。
内容的提问来源于stack exchange,提问作者jet
相关产品推荐
相关产品推荐

