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

递归复制字符矩阵值失效,请求排查Java代码问题

问题分析与修复方案

我来帮你拆解这个递归复制矩阵方法的问题:

核心错误点

  • 列数判断混淆了行数:你代码里所有用到b.length来判断列边界的地方都错了——b.length是二维数组的行数,而每行的列数应该用b[i].length。比如原条件j!=b.length,会把行数当成列数来判断,导致复制提前终止或者数组越界。
  • 终止条件逻辑错误:原代码的终止条件是i!=b.length && j!=b.length,这意味着只要i达到行数或者j达到行数(这本身就是错的)就停止。但正确的终止逻辑应该是:当i == b.length时,说明所有行都处理完成,直接终止递归即可,不用管j的取值。
  • 列末尾判断错误:j==b.length-1同样错把行数当列数,应该改成j == b[i].length - 1,这样才能正确判断当前行是否处理到最后一列。

修正后的代码

public static void igualacionMatrices(char[][] a, char[][] b, int i, int j) {
    // 终止条件:当i等于行数时,所有元素已复制完成
    if (i == b.length) {
        return;
    }
    
    // 复制当前元素
    a[i][j] = b[i][j];
    
    // 判断是否需要切换到下一行
    if (j == b[i].length - 1) {
        // 当前行已处理完,i+1,j重置为0
        igualacionMatrices(a, b, i + 1, 0);
    } else {
        // 处理当前行的下一列
        igualacionMatrices(a, b, i, j + 1);
    }
}

代码解释

  1. 首先判断i == b.length,如果成立说明所有行都复制完毕,直接返回终止递归。
  2. 先复制当前位置a[i][j] = b[i][j]。
  3. 然后判断当前j是否是当前行的最后一列:
    • 如果是,就递归调用处理下一行的第一列(i+1,j=0)
    • 如果不是,就递归调用处理当前行的下一列(j+1)

这样就能正确地递归遍历整个二维数组,完成矩阵复制了。

内容的提问来源于stack exchange,提问作者james2345

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:32:32