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

Java中矩阵行列交换代码异常:正确性排查求助

代码问题分析与修复方案

问题根源

你的代码将列交换和行交换操作放在同一个k循环中执行,导致两类操作互相干扰:

  • 当k等于i或j时,列交换会先修改vector[i][i]、vector[i][j]、vector[j][i]、vector[j][j]这些交叉位置的元素;
  • 后续行交换再操作这些位置时,使用的已经是被列交换修改过的值,最终导致部分位置结果错误。

另外,原代码行交换部分使用vector.length作为循环上限,若矩阵为非方阵(行数≠列数),会出现数组越界或交换不完整的问题。

修复后的代码

将列交换和行交换拆分为两个独立的循环,确保两类操作互不干扰,同时适配非方阵场景:

public static void intercambiar(int[][] vector, int i, int j) {
    // 交换第i列与第j列的所有元素
    for (int k = 0; k < vector.length; k++) {
        int temp = vector[k][j];
        vector[k][j] = vector[k][i];
        vector[k][i] = temp;
    }
    // 交换第i行与第j行的所有元素
    for (int k = 0; k < vector[0].length; k++) {
        int temp = vector[j][k];
        vector[j][k] = vector[i][k];
        vector[i][k] = temp;
    }
}

逻辑说明

  1. 先完整执行列交换循环:遍历每一行,交换该行第i列和第j列的元素,完成所有列交换后,矩阵的列状态稳定;
  2. 再独立执行行交换循环:遍历每一列,交换该列第i行和第j行的元素,此时行交换操作不会被之前的列交换干扰,结果完全符合预期。

内容的提问来源于stack exchange,提问作者David Rodríguez de Lope

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:32:50