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

矩阵奇数行反转功能异常:代码执行后矩阵无变化

矩阵奇数行反转问题修复

你的代码存在三个核心问题,导致矩阵无变化:

  1. 整行遍历引发重复交换
    内层循环遍历了当前行的所有列,比如一行有4个元素时,j从0到3:

    • j=0:交换索引0和3的元素
    • j=1:交换索引1和2的元素
    • j=2:又交换索引2和1的元素(把之前的交换还原)
    • j=3:又交换索引3和0的元素(再次还原)
      最终整行等于没修改。
  2. 列索引计算错误
    你用matrix.length(矩阵的总行数)来计算列的位置,这是错误的,应该用当前行的列数matrix[i].length,否则非方阵会出现数组越界或索引错位。

  3. 未正确使用辅助矩阵
    代码里的matrixHelper只是单个临时变量,不是你说的辅助矩阵。如果要通过辅助矩阵取值,需要先完整复制原行数据。


修复方案1:直接在原矩阵上正确交换(无需辅助矩阵)

只遍历行的前半部分,避免重复交换:

public void horizontalReverse() {
    // 遍历奇数行(注意:这里i从1开始对应第2行,若需求是第1、3...行,需改为i=0开始,步长2)
    for (int i = 1; i < matrix.length; i += 2) { 
        int rowLength = matrix[i].length;
        // 只遍历前半部分元素,和后半部分对应位置交换
        for (int j = 0; j < rowLength / 2; j++) { 
            int temp = matrix[i][j];
            matrix[i][j] = matrix[i][rowLength - 1 - j];
            matrix[i][rowLength - 1 - j] = temp;
        }
    }
}

修复方案2:使用辅助数组实现(逻辑更直观)

先把原行数据复制到辅助数组,再反向赋值回原矩阵,避免原数组修改影响取值:

public void horizontalReverse() {
    for (int i = 1; i < matrix.length; i += 2) {
        int rowLength = matrix[i].length;
        int[] helperRow = new int[rowLength];
        // 复制原行数据到辅助数组
        System.arraycopy(matrix[i], 0, helperRow, 0, rowLength);
        // 从辅助数组反向赋值回原行
        for (int j = 0; j < rowLength; j++) {
            matrix[i][j] = helperRow[rowLength - 1 - j];
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:55:14