如何将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
相关产品推荐
相关产品推荐

