Java实现Square3x3构造器 解决入参数组小于3x3时代码失效问题
问题排查与修复方案
存在的问题
- 默认值错误:Java中int类型数组初始化后,元素默认值为0,而非需求要求的-1,你目前的代码没有对未覆盖的位置主动赋值为-1,所以尺寸不足时会得到错误的0值。
- 冗余变量:代码中定义的
count变量和循环变量i完全同步,没有实际作用,属于冗余代码。
修正后代码
public class Square3x3 { private int[][] square3x3; // 小驼峰命名更符合Java规范,也避免和类名冲突 public Square3x3(int[][] array) { square3x3 = new int[3][3]; // 先把所有位置初始化为-1,后续只要覆盖存在的元素即可 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { square3x3[i][j] = -1; } } // 复制传入数组存在的元素 for (int i = 0; i < 3 && i < array.length; i++) { for (int j = 0; j < 3 && j < array[i].length; j++) { square3x3[i][j] = array[i][j]; } } } // 按需添加getter方法访问私有数组 public int[][] getSquare3x3() { // 返回副本避免外部修改内部状态,为可选优化项 int[][] copy = new int[3][3]; for (int i = 0; i < 3; i++) { System.arraycopy(square3x3[i], 0, copy[i], 0, 3); } return copy; } }
实现说明
- 初始化阶段先将整个3x3数组填充为-1,避免后续判断缺项再赋值的复杂逻辑,同时完全符合“不存在对应位置的单元格才赋值为-1”的要求
- 复制阶段通过两层循环的边界判断
i < 3 && i < array.length和j < 3 && j < array[i].length,天然支持传入数组尺寸大于3x3、行数不足、单行列数不足、非对称数组等所有边界场景 - 调整了成员变量的命名为小驼峰格式,避免和类名重名,符合Java编码规范,你如果需要保留原有命名可以自行修改
内容的提问来源于stack exchange,提问作者Tim Asher
相关产品推荐
相关产品推荐

