用int[][]或String[][]声明固定尺寸棋盘最直接;Java二维数组是“数组的数组”,需显式指定行列数,如char[][] board = new char8。

用 int[][] 或 String[][] 声明固定尺寸棋盘最直接
Java 里二维数组本质是“数组的数组”,适合表示行列明确的结构,比如国际象棋(8×8)、五子棋(15×15)或 Excel 风格表格。声明时必须指定行数和列数(或至少行数),不能像 Python 那样动态推导:
char[][] board = new char[8][8]; // 棋盘初始化为全 '\u0000'如果想用可读符号初始化,常见做法是配合循环或静态块填充:
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
board[i][j] = '.'; // 空位用点号
}
}注意 board[i].length 而不是 board.length——后者是行数,前者才是第 i 行的列数,这点在不规则二维数组中尤其关键。
访问越界错误 ArrayIndexOutOfBoundsException 是高频陷阱
下标从 0 开始,但人脑习惯从 1 数起,写坐标逻辑时极易出错。例如想把黑车放在 a1(国际象棋记法),实际要映射到 board[7][0](假设 a=0, h=7;1=0, 8=7)。常见错误包括:
- 用
board[x][y]但没校验x >= 0 && x = 0 && y - 混淆行列顺序:误把“第 3 行第 5 列”写成
board[5][3] - 遍历时用错边界,比如
for (int i = 0; i 多跑一次
System.out.println("trying to access [" + row + "][" + col + "]");比单纯看异常堆栈更快定位问题。
用 Object[][] 存不同类型的格子数据更灵活
纯 char 或 int 只能存单一值,但真实棋盘常需附加信息:比如某个位置是否有棋子、是什么颜色、是否被标记、甚至关联一个 Piece 对象。这时声明为 Object[][] 或泛型容器更合适:
Piece[][] board = new Piece[8][8]; // Piece 是自定义类这样每个格子可以是
null(空)、new Rook(Color.BLACK) 或 new Pawn(Color.WHITE)。注意:不能直接用 new Piece[8][8] 初始化所有元素为非 null 实例,必须显式赋值,否则访问 board[0][0].getColor() 会触发 NullPointerException。性能与扩展性:二维数组不适合频繁增删行/列
二维数组大小固定,一旦初始化就不能改变行列数。如果业务需要“插入一行”“删除一列”(比如动态表格),硬用 new 重建数组并复制数据,时间复杂度是 O(m×n),且易出错。此时应换用嵌套 ArrayList:
List<List<String>> table = new ArrayList<>();它支持
add()、remove(),但随机访问仍是 O(1)。不过要注意:每行长度可以不同,若需强约束行列一致性,就得靠代码逻辑保障,而不是语言机制。
二维数组模拟棋盘的核心就三件事:声明时定好尺寸、访问时严守下标边界、存值时匹配数据粒度。最容易被忽略的是——你写的“第 i 行第 j 列”,到底对应用户界面里的哪个视觉位置,这个映射关系一旦定错,后面所有逻辑都会偏移。


















