You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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}

原代码问题分析

你提供的代码存在两个关键问题:

  1. 数组越界:内层循环条件col <= Board.length会导致col+1超出数组列索引范围,数组列索引最大为Board[row].length - 1,正确的循环条件应该是col < Board[row].length - 1
  2. 重复合并风险:当前代码会重复处理已经合并过的元素,同时没有跳过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:45:33