Java矩阵运算需安全访问二维数组:行数用arr.length,列数须按每行校验arr[i].length;行优先遍历为默认推荐方式;列优先需先求最大列宽或动态判界;访问前必须检查行列边界及null。

Java 中矩阵运算依赖二维数组,而正确访问行与列是基础中的基础。关键不在“能不能访问”,而在“怎么访问才安全、通用、不越界”。尤其要注意:行数和列数的获取方式不同,且不规则数组下每行长度可能不一样。
行数和列数不能混用
二维数组的行数始终是 arr.length,这个值永远可靠。但列数不能直接写 arr[0].length 就完事——这只对规则数组(每行列数相同)成立。实际开发中常遇到不规则结构(比如三角形数组、稀疏表),此时第 0 行长度不代表其他行。
- 安全做法:访问某行第 j 列前,先确认 j < arr[i].length
- 错误示范:
for (int j = 0; j < arr[0].length; j++)遍历所有行 → 第 2 行若比第 0 行短,就会 ArrayIndexOutOfBoundsException - 正确写法:
for (int j = 0; j < arr[i].length; j++),每行用自己的长度校验
行优先遍历是默认且推荐的方式
按“先走完一行,再换下一行”的顺序访问,符合内存局部性,性能更好,也最贴近人类读表格的习惯。几乎所有标准操作(打印、求和、复制)都基于此。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 标准模板:
for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {// 处理 arr[i][j]}}
列优先遍历需特别注意边界
想先取第 0 列所有行、再取第 1 列……这种模式在转置、列统计等场景有用,但容易出错。核心难点在于:各行列数不同,某列可能在某些行根本不存在。
立即学习“Java免费学习笔记(深入)”;
- 必须先确定“最大列宽”或逐列动态判断:对每个 j,检查 i 行是否存在第 j 列(即
j < arr[i].length) - 常见错误:把
arr[i].length写成arr[0].length当作统一列数,导致越界 - 安全写法示例:
int maxCols = 0;for (int i = 0; i < arr.length; i++) maxCols = Math.max(maxCols, arr[i].length);for (int j = 0; j < maxCols; j++) {for (int i = 0; i < arr.length; i++) {if (j < arr[i].length) System.out.println(arr[i][j]);}}
访问前必须做索引校验
直接写 arr[2][3] 是危险的。生产代码中应封装带校验的访问方法,或至少手动检查边界。
- 校验顺序很重要:先判行
i >= 0 && i < arr.length,再判列j >= 0 && j < arr[i].length - 避免 NPE:不规则数组中,某行可能为 null(如
int[][] a = new int[3][];后未给a[1]赋值),访问前要加arr[i] != null - 建议封装工具方法,例如:
safeGet(arr, i, j, defaultValue)

















