主对角线元素满足行索引等于列索引,取min(m,n)为上限;副对角线满足行索引加列索引等于n−1,仅对方阵定义;非方阵副对角线需谨慎处理。

Java 中二维数组对角线元素的提取与求和,核心在于识别主对角线(从左上到右下)和副对角线(从右上到左下)的索引规律,并注意方阵与非方阵的区别。实际开发中,多数场景针对方阵(行数 == 列数),但也要考虑通用性。
主对角线:行索引等于列索引
对于一个 m × n 的二维数组,主对角线元素满足 row == col,且 row 和 col 都在有效范围内。因此遍历时取最小维度作为上限更安全。
- 若数组是方阵(如 4×4),主对角线有 4 个元素:arr[0][0]、arr[1][1]、arr[2][2]、arr[3][3]
- 若数组是矩形(如 3×5),主对角线只有 min(3,5)=3 个元素:arr[0][0]、arr[1][1]、arr[2][2]
- 代码片段:
int sum = 0;
for (int i = 0; i sum += arr[i][i];
}
副对角线:行索引 + 列索引 = 列数 - 1
副对角线元素满足 row + col == arr[0].length - 1,前提是每行长度一致(标准二维数组)。同样需保证行索引不越界。
- 对于 4×4 数组,副对角线为 arr[0][3]、arr[1][2]、arr[2][1]、arr[3][0]
- 对于 3×5 数组,副对角线有 3 个元素:arr[0][4]、arr[1][3]、arr[2][2](因为只有 3 行,col = 4−i,i 从 0 到 2)
- 代码片段:
int sum = 0;
int cols = arr[0].length;
for (int i = 0; i int j = cols - 1 - i;
if (j >= 0 && j }
避免重复计算中心元素(奇数阶方阵)
当数组是奇数阶方阵(如 5×5)时,主副对角线在中心位置(arr[2][2])相交。若需两条对角线元素总和,直接相加会重复计入该元素。
- 推荐方式:分别求和后减去一次中心元素(仅当 arr.length 为奇数且为方阵时)
- 判断条件:if (arr.length % 2 == 1 && arr.length == arr[0].length)
- 中心索引为 mid = arr.length / 2,重复元素为 arr[mid][mid]
封装成可复用方法
把逻辑写成静态方法,增强可读性和复用性。传入数组,返回主对角线和、副对角线和、或两者之和(去重)。
- 示例签名:public static int sumMainDiagonal(int[][] arr)
- 建议增加空值和空数组校验:if (arr == null || arr.length == 0 || arr[0].length == 0)
- 对不规则二维数组(各行长度不同),应先校验每行长度是否一致,否则副对角线可能越界
不复杂但容易忽略边界和重复问题,抓住索引关系 + 维度校验,就能稳稳处理。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











