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

Java中获取二维数组列数及矩阵转置实现问题求助

Java矩阵转置实现、测试代码问题及Python转Java建议

一、矩阵转置代码修正

Java中二维矩阵的列数需通过x[0].length获取(前提是矩阵非空且每行长度一致),你写的x[1.length]是语法错误。以下是补全逻辑后的完整代码:

import stdlib.StdArrayIO;

public class Transpose {
    // 入口方法
    public static void main(String[] args) {
        double[][] x = StdArrayIO.readDouble2D();
        StdArrayIO.print(transpose(x));
    }

    // 返回矩阵x的转置矩阵
    private static double[][] transpose(double[][] x) {
        // 处理空矩阵,避免空指针异常
        if (x == null || x.length == 0) {
            return new double[0][0];
        }
        int rows = x.length; // 原矩阵行数m
        int cols = x[0].length; // 原矩阵列数n
        // 创建n行m列的转置矩阵
        double[][] t = new double[cols][rows];

        // 遍历填充转置矩阵
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                t[j][i] = x[i][j];
            }
        }

        return t;
    }
}

二、测试代码scrap的问题

你的scrap代码本身逻辑没问题,运行时等待输入是因为不必要地导入了StdArrayIO类,该类的相关方法可能会触发输入流监听。移除多余导入即可正常运行:

import stdlib.StdOut;

public class scrap {
    public static void main(String[] args){
        double[][] x = new double[10][20];
        StdOut.println(x.length); // 直接输出10
    }
}

三、从Python转Java的学习建议

  • 强化强类型思维:Java是强类型语言,变量必须提前声明类型,比如double[][] x不能像Python那样直接x = [[1,2],[3,4]]。
  • 区分数组与集合:Java数组长度固定,初始化后无法扩容;需动态调整元素数量时,改用ArrayList等集合类,这和Python的列表特性更接近。
  • 适应类结构约束:Java所有代码必须包裹在类中,主方法必须遵循public static void main(String[] args)的固定格式,不能像Python那样写无类包裹的脚本代码。
  • 重视异常处理:Java对空指针、数组越界等异常要求更严格,需主动处理或声明;Python异常处理虽灵活,但也要养成提前预判异常的习惯。
  • 熟悉编译流程:Java需先编译为字节码文件再运行,要适应编译阶段的语法错误提示,这和Python的解释执行模式不同。
  • 善用官方API文档:Java官方API文档对类、方法的说明非常详细,遇到数组、集合操作时优先查阅官方文档,比如Arrays类的工具方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:40:38