Java如何精简二维数组遍历绘制方块的冗余代码
Java二维数组渲染方块的代码优化方案
现有代码问题
你当前的实现存在三个明显问题:
- 冗余度极高:你枚举的所有
map[行号][列号]位置的取值全是1,堆了13个逻辑完全一致的if判断,完全没有必要。 - 存在越界隐患:内层列循环写的是
j < map.length,这个写法只在二维数组是严格正方形(行列数相等)时才不会报错,如果后续调整地图为非正方形尺寸,会直接触发数组下标越界异常。 - 可维护性差:如果后续调整二维数组里的数值、修改1的位置,你需要手动增删对应的if判断,很容易漏改或者写错坐标。
优化思路
核心逻辑非常直接:你的需求是在二维数组值为1的位置绘制方块,不需要提前枚举所有值为1的坐标做比对,遍历到每个元素时直接判断当前值是否为1即可,同时修正内层循环的边界判断。
优化后实现代码
for (int i = 0; i < map.length; i++) { // 内层循环取当前行的列长度作为边界,避免越界 for (int j = 0; j < map[i].length; j++) { if (map[i][j] == 1) { gc.fillRect(i, j, 1, 1); } } }
优化后代码从原来的近30行压缩到7行,没有任何重复逻辑,后续修改地图数据(就是你贴的8*8二维数组)时完全不需要改动渲染代码,只要数组里值为1的位置都会自动绘制方块。
补充说明:如果你后续需要扩展逻辑,比如值为2的位置绘制其他颜色的方块,只需要在if后追加对应的
else if (map[i][j] == 2)分支即可,不需要改动循环结构。
内容的提问来源于stack exchange,提问作者some chars
相关产品推荐
相关产品推荐

