递归复制字符矩阵值失效,请求排查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); } }
代码解释
- 首先判断
i == b.length,如果成立说明所有行都复制完毕,直接返回终止递归。 - 先复制当前位置
a[i][j] = b[i][j]。 - 然后判断当前j是否是当前行的最后一列:
- 如果是,就递归调用处理下一行的第一列(i+1,j=0)
- 如果不是,就递归调用处理当前行的下一列(j+1)
这样就能正确地递归遍历整个二维数组,完成矩阵复制了。
内容的提问来源于stack exchange,提问作者james2345
相关产品推荐
相关产品推荐

