Java中处理二维数组对角线需区分主对角线(matrixi)和副对角线(matrixi),方阵可直接遍历,矩形矩阵取min(n,m)防越界;奇数阶方阵中心元素需去重;须校验null、空数组及行长度避免异常。

Java 中访问和处理二维数组的对角线元素,关键在于理解主对角线(从左上到右下)和副对角线(从右上到左下)的索引规律,并注意矩阵是否为方阵、是否需要去重(如中心元素在奇数阶矩阵中同时属于两条对角线)。
主对角线元素的识别与遍历
对于 n × n 方阵,主对角线上每个元素满足行索引等于列索引,即 matrix[i][i],其中 i 从 0 到 n-1。
- 直接用单层 for 循环即可遍历:for (int i = 0; i
- 若矩阵非方阵(m×n),主对角线长度为 min(m, n),循环上限应设为 Math.min(matrix.length, matrix[0].length)
- 常见用途包括:求和、找最大/最小值、替换为固定值、判断是否为单位矩阵等
副对角线元素的索引推导与安全访问
副对角线元素满足行索引 + 列索引 = n - 1,即 matrix[i][n - 1 - i]。注意必须确保列索引不越界,尤其在非方阵场景下。
- 推荐写法:int n = matrix.length; int m = matrix[0].length; for (int i = 0; i = 0; i++)
- 更简洁方式是取有效长度:int len = Math.min(n, m); 再遍历 i ∈ [0, len),访问 matrix[i][len - 1 - i]
- 示例:3×4 矩阵中,副对角线只有前 3 行的对应列(即 matrix[0][2]、matrix[1][1]、matrix[2][0])有效
两条对角线合并处理与去重逻辑
当需同时处理主、副对角线(如“X形”扫描),需避免奇数阶方阵中心元素被重复计算。
立即学习“Java免费学习笔记(深入)”;
- 可先用 Set 存储坐标对(i, j),再统一处理;或用布尔二维标记数组
- 更轻量做法:先累加主对角线,再累加副对角线时跳过 i == n-1-i 的情况(即 i == n/2 且 n 为奇数)
- 代码片段:if (i != n - 1 - i) sum += matrix[i][n - 1 - i];
实战小技巧:泛化支持矩形矩阵 + 边界防护
健壮的对角线处理应默认兼容任意二维数组(含 null 行、空行),并主动防御 NullPointerException 和 ArrayIndexOutOfBoundsException。
- 开头校验:if (matrix == null || matrix.length == 0) return;
- 逐行检查:for (int i = 0; i
- 访问前确认列长:int colLen = matrix[i].length; if (j >= 0 && j


















