如何用Java合并二维数组中相邻的相同元素?
Java二维数组相邻相同元素合并处理问题
需求说明
处理二维数组Board,规则如下:
- 仅处理同一行内的相邻元素
- 若相邻两个元素相同,将左侧元素设为原元素的2倍,右侧元素置为0
示例
原数组
{0, 2, 4, 2} {0, 0, 2, 2} {2, 2, 0, 0} {0, 5, 0, 2}
处理后数组
{0, 2, 4, 2} {0, 0, 4, 0} {4, 0, 0, 0} {0, 5, 0, 2}
原代码问题分析
你提供的代码存在两个关键问题:
- 数组越界:内层循环条件
col <= Board.length会导致col+1超出数组列索引范围,数组列索引最大为Board[row].length - 1,正确的循环条件应该是col < Board[row].length - 1 - 重复合并风险:当前代码会重复处理已经合并过的元素,同时没有跳过0元素的判断,可能不符合示例中0不参与合并的逻辑
修正后的代码
for (int row = 0; row < Board.length; row++) { // 遍历每行的相邻元素,避免越界 for (int col = 0; col < Board[row].length - 1; col++) { // 跳过0元素,避免0和0合并(匹配示例逻辑) if (Board[row][col] == 0) { continue; } // 相邻元素相同则合并 if (Board[row][col] == Board[row][col + 1]) { Board[row][col] *= 2; Board[row][col + 1] = 0; // 合并后跳过下一个元素,避免重复处理已置0的元素 col++; } } }
修正说明
- 内层循环条件改为
col < Board[row].length - 1,确保col+1不会超出数组边界 - 增加跳过0元素的判断,匹配示例中仅合并非0相邻元素的逻辑
- 合并后执行
col++,跳过已置0的右侧元素,避免重复触发合并判断
内容的提问来源于stack exchange,提问作者Lenin Cumin
相关产品推荐
相关产品推荐

