多维数组条件统计需先遍历再判断后计数,二维数组用双重for循环最直观可控;外层控行、内层控列,注意空行和不规则长度防护;多条件统计宜用独立变量或一维数组;增强for适用于无索引依赖场景。

多维数组的条件统计,核心在于“先遍历、再判断、后计数”,不能跳过逐层访问这一步。二维数组尤其常见,比如成绩表、矩阵运算、网格数据等场景,统计逻辑必须嵌套在双重循环里。
用双重for循环遍历二维数组并统计
这是最直观、最可控的方式。外层循环控制行,内层循环控制列,每访问一个元素就做一次条件判断。
- 定义二维数组时,可用静态初始化(如 int[][] scores = {{85, 92, 78}, {90, 88, 95}, {76, 83, 89}};)或动态初始化(如 new int[3][3])
- 外层循环变量 i 从 0 到 arr.length - 1,代表行索引
- 内层循环变量 j 从 0 到 arr[i].length - 1,代表该行的列索引(注意:每行长度可能不同)
- 在内层循环体内写判断逻辑,例如 if (arr[i][j] >= 90) { excellentCount++; }
统计多个条件时用独立计数器或一维结果数组
若需同时统计“优秀(≥90)”“良好(80–89)”“及格(60–79)”三类人数,建议为每类声明单独变量,或用长度为3的一维数组存储结果,提升结构清晰度。
- 例如:int[] stats = new int[3]; // [excellent, good, pass]
- 对应判断中分别更新:if (score >= 90) stats[0]++; else if (score >= 80) stats[1]++; else if (score >= 60) stats[2]++;
- 避免用 else if 漏掉边界情况(如负分或超100分),可加兜底日志或过滤逻辑
增强for循环适合简洁读取,但无法直接获取下标
当只关心数值本身、不依赖行列位置时,可用增强for简化代码。但要注意:它隐藏了索引,若统计逻辑依赖位置(如“第2行所有元素之和”),就必须退回传统for循环。
- 写法示例:for (int[] row : arr) { for (int val : row) { if (val % 2 == 0) evenCount++; } }
- 优势是代码更短、不易越界;劣势是调试时难定位具体位置,也不方便修改原数组元素
- 若需记录满足条件的坐标(如行号、列号),增强for无法胜任,必须用带索引的循环
避免常见陷阱:空指针与不规则数组
二维数组本质是“一维数组的数组”,各行长度可不同(即不规则数组),且某行可能为 null。遍历时必须提前防护。
- 每次进入内层循环前,检查 if (arr[i] != null),否则调用 arr[i].length 会抛 NullPointerException
- 内层循环条件写成 j ,而非固定值(如 j ),否则在不规则数组中会漏统计或越界
- 初始化计数器一定要置0,未初始化的局部变量无默认值,编译不通过
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











