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

如何编写实现二维数组行列互换的Java方法 现有代码报错如何解决

代码错误列表
  • 类修饰符非法:Java顶层类不允许使用static修饰,只有静态内部类才能添加static修饰符,当前代码直接编译不通过。
  • 类命名不符合规范:Java类名要求使用大驼峰形式,首字母需大写,不应使用小写开头的inverse作为类名。
  • 数组初始化逻辑错误:直接硬编码创建3*3的新数组,仅能处理固定大小的方阵,不满足接收任意整数二维数组的需求;且初始化后没有将传入的原数组A的内容写入新数组,全程操作的都是全0值的空数组,完全没有用到入参。
  • 循环逻辑完全错误:循环边界设置为数组长度的1/2,仅能遍历数组前1/4的区域,且逻辑是数组反转的错误思路,和转置(行列互换)的需求完全不匹配。
  • 赋值类型不匹配:代码中B[B.length - i - 1]是一维数组类型,直接给它赋值int类型的swap变量,类型不兼容,编译报错。
  • 返回值错误:swap是第二层for循环内的局部变量,超出作用域后无法访问;且方法要求返回int[][]类型的二维数组,swap是int类型,类型不匹配,编译报错。
正确实现思路与代码

转置的核心逻辑是将原数组第i行第j列的元素,放到新数组的第j行第i列位置。首先要根据传入的原数组的行列数动态初始化转置数组,保证支持所有规则二维数组的转置需求:

public class Inverse {
    public static int[][] arrayInverse(int[][] A) {
        // 非空校验,避免空指针异常
        if (A == null || A.length == 0 || A[0].length == 0) {
            return new int[0][0];
        }
        // 原数组的行、列数
        int originalRow = A.length;
        int originalCol = A[0].length;
        // 转置后数组行列互换
        int[][] transposedArr = new int[originalCol][originalRow];
        // 遍历原数组完成转置赋值
        for (int i = 0; i < originalRow; i++) {
            for (int j = 0; j < originalCol; j++) {
                transposedArr[j][i] = A[i][j];
            }
        }
        return transposedArr;
    }
}

如果是需要原地转置方阵(行数等于列数的二维数组),可以用元素交换的方式节省内存,无需创建新数组,实现逻辑如下:

public static void squareArrayInverse(int[][] A) {
    if (A == null || A.length == 0 || A.length != A[0].length) {
        return;
    }
    int n = A.length;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            int temp = A[i][j];
            A[i][j] = A[j][i];
            A[j][i] = temp;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:21:02