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

如何将Matrix对象转换为int[][]数组?调用setMatrixVals报错求助

问题分析与修正

核心错误点

  • 类型不匹配:你声明的m2是Matrix[][](二维Matrix对象数组),但setMatrixVals是单个Matrix对象的方法,不能直接用数组调用该方法。
  • 非法数组语法:[4][3]不是Java中创建二维数组的合法写法,正确写法是new int[4][3]。
  • 私有成员访问错误:matrixVals是Matrix类的私有字段,不能在MatrixDemo中直接赋值,必须通过类提供的getter方法获取数组后操作。
  • 未初始化对象:如果使用Matrix[][]数组,每个元素默认是null,直接操作会抛出空指针异常。

修正方案(推荐)

调整设计,让单个Matrix对象对应一个int[][]矩阵,而非用Matrix二维数组。以下是修正后的完整代码:

Matrix类(无需修改,保持原代码)

public class Matrix
{
   //instance fields
   private int[][] matrixVals;
   
   public Matrix(int[][] mVals)
   {
      matrixVals = mVals;
   }
   
   public void setMatrixVals(int[][] mVals)
   {   
      matrixVals = mVals;
   }
   
   public int[][] getMatrixVals()
   {
      return matrixVals;
   }
}

修正后的MatrixDemo类

import java.util.Random;

public class MatrixDemo
{
   public static void main(String[] args)
   {
      Random r = new Random();
      
      // 单个Matrix对象对应一个4x3的矩阵
      Matrix m2 = new Matrix(new int[4][3]);
                 
      System.out.println("Matrix A:");
      
      // 获取Matrix内部的int[][]数组
      int[][] matrixVals = m2.getMatrixVals();
      
      // 填充随机值并打印
      for(int i=0;i<4;i++)
      {
         for(int j=0;j<3;j++)
         { 
            matrixVals[i][j] = r.nextInt(20);
            System.out.print(matrixVals[i][j] + "\t");
         }
         System.out.print("\n");
      }
   }
}

另一种优化方案(在Matrix类中封装填充逻辑)

如果希望把填充随机值的逻辑封装在Matrix类内部,可以给Matrix类新增对应方法:

优化后的Matrix类

import java.util.Random;

public class Matrix
{
   private int[][] matrixVals;
   
   public Matrix(int rows, int cols)
   {
      matrixVals = new int[rows][cols];
   }
   
   public void setMatrixVals(int[][] mVals)
   {   
      matrixVals = mVals;
   }
   
   public int[][] getMatrixVals()
   {
      return matrixVals;
   }
   
   // 新增:填充0-19的随机值
   public void fillRandomVals()
   {
      Random r = new Random();
      for(int i=0; i<matrixVals.length; i++)
      {
         for(int j=0; j<matrixVals[i].length; j++)
         {
            matrixVals[i][j] = r.nextInt(20);
         }
      }
   }
}

对应的MatrixDemo类

public class MatrixDemo
{
   public static void main(String[] args)
   {
      Matrix m2 = new Matrix(4, 3);
      m2.fillRandomVals();
      
      System.out.println("Matrix A:");
      int[][] matrixVals = m2.getMatrixVals();
      
      for(int i=0;i<4;i++)
      {
         for(int j=0;j<3;j++)
         { 
            System.out.print(matrixVals[i][j] + "\t");
         }
         System.out.print("\n");
      }
   }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:50:24