Java OCA备考:二维数组的for与for-each循环遍历方法咨询
嘿,刚好在准备OCA考试的话,多维数组遍历确实是容易踩坑的点,尤其是你给的这种不规则二维数组(每行长度不一样),我把所有能用for循环和for-each循环的遍历方式都给你理清楚,顺便补点考试要注意的细节:
先明确咱们要遍历的数组:
int[][] matrix = {{3,4,5},{6,7,8},{9},{10,11,12}};
遍历方式汇总
1. 外层for-each + 内层普通for循环
这是你已经掌握的第一种方式,适合需要用到列索引的场景(比如修改元素、获取元素位置):
for (int[] row : matrix) { for (int i = 0; i < row.length; i++) { // 这里写你的业务代码,比如打印或修改元素 System.out.print(row[i] + " "); } }
2. 双层for-each循环
这是最简洁的遍历写法,只需要读取元素值的时候非常好用,也是OCA考试的高频考点:
for (int[] row : matrix) { for (int num : row) { System.out.print(num + " "); } }
⚠️ 注意:for-each拿到的是元素的副本,没法直接修改数组里的元素值,如果要修改必须用索引操作。
3. 双层普通for循环(你没写完的那种)
这种方式需要严格控制行和列的索引,尤其要注意内层循环的终止条件是当前行的长度,不能用固定值(比如matrix[0].length),否则会抛出ArrayIndexOutOfBoundsException:
for (int i = 0; i < matrix.length; i++) { // 关键:用matrix[i].length而不是固定长度 for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } }
4. 外层普通for倒序 + 内层for-each
如果需要从最后一行开始遍历,可以这么写:
for (int i = matrix.length - 1; i >= 0; i--) { for (int num : matrix[i]) { System.out.print(num + " "); } }
5. 外层for-each + 内层普通for倒序
正常遍历每一行,但从该行的最后一个元素往前读:
for (int[] row : matrix) { for (int i = row.length - 1; i >= 0; i--) { System.out.print(row[i] + " "); } }
6. 双层普通for倒序遍历
行和列都倒序遍历,适合需要反向读取整个数组的场景:
for (int i = matrix.length - 1; i >= 0; i--) { for (int j = matrix[i].length - 1; j >= 0; j--) { System.out.print(matrix[i][j] + " "); } }
OCA考试相关注意点
- 不规则二维数组的内层循环必须用当前行的长度(
row.length或matrix[i].length),这是考试里经常出的陷阱题。 - for-each循环不能用于修改数组元素的原值,只能读取;如果要修改元素,必须用普通for循环通过索引操作。
- 多维数组本质上是“数组的数组”,所以外层遍历的每一个元素都是一个一维数组,这点要牢记。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

