Java报错incompatible types: Matrix无法转换为int[][]该如何解决?
问题修复方案
报错核心原因
你遇到的incompatible types: Matrix cannot be converted to int[][]报错属于类型不匹配问题:
- 你定义的
transpose、scalarMult、add三个方法都声明了返回值类型为自定义的Matrix类 - 但你实际返回的是
int[][]类型的二维数组,Java无法自动完成两种类型的转换 - 除此之外你代码中声明的二维数组都没有初始化,即使修复了类型问题运行时也会抛出空指针异常
前置前提
首先确认你的Matrix类存在接收int[][]作为入参的构造方法,格式参考如下,如果没有需要先在Matrix类中补充:
public Matrix(int[][] arr) { // 这里写你自己的赋值逻辑,把arr的内容赋值到Matrix类的内置二维数组属性里 }
分方法修改要点
- transpose()方法修改
- 初始化二维数组temp,转置后的矩阵行数等于原矩阵列数,列数等于原矩阵行数:
int[][] temp = new int[matr[0].length][matr.length]; - 返回时用temp构造Matrix对象,不要直接返回temp:
return new Matrix(temp);
- 初始化二维数组temp,转置后的矩阵行数等于原矩阵列数,列数等于原矩阵行数:
- scalarMult()方法修改
- 初始化二维数组scmatr,维度和原矩阵保持一致:
int[][] scmatr = new int[matr.length][matr[0].length]; - 返回时用scmatr构造Matrix对象:
return new Matrix(scmatr);
- 初始化二维数组scmatr,维度和原矩阵保持一致:
- add()方法修改
- 先获取参数m2的二维数组内容:
int[][] m2Vals = m2.getMatrixVals(); - 校验两个矩阵维度一致,不一致的话可以抛出非法参数异常
- 初始化二维数组addMatr,维度和原矩阵保持一致:
int[][] addMatr = new int[matr.length][matr[0].length]; - 嵌套循环遍历两个矩阵,对应位置数值相加后赋值给addMatr的对应位置
- 返回时用addMatr构造Matrix对象:
return new Matrix(addMatr);
- 先获取参数m2的二维数组内容:
修改后完整代码
public Matrix transpose() { //store matrix vals in variable to use as reference int [][] matr = this.getMatrixVals(); //初始化转置矩阵,行数为原矩阵列数,列数为原矩阵行数 int [][] temp = new int[matr[0].length][matr.length]; //use nested for loop to assign each of the ints for (int i = 0; i < matr[0].length; i++) { for (int j = 0; j < matr.length; j++) { //assign the transposed position temp[i][j] = matr[j][i]; } } //用二维数组构造Matrix对象后返回 return new Matrix(temp); } //method to scalar multiply public Matrix scalarMult(int scVal) { //store matrix vals in variable to use as reference int [][] matr = this.getMatrixVals(); //初始化结果矩阵,维度和原矩阵一致 int [][] scmatr = new int[matr.length][matr[0].length]; //multiplies all elements of the this object by the scVal (int) value of the parameter for(int i = 0; i < matr.length; i++) { for(int j = 0; j < matr[0].length; j++) { scmatr[i][j] = scVal * matr[i][j]; } } //用二维数组构造Matrix对象后返回 return new Matrix(scmatr); } //method that adds the this object and the parameter Matrix object public Matrix add(Matrix m2) { int[][] matr = this.getMatrixVals(); int[][] m2Vals = m2.getMatrixVals(); //维度校验 if(matr.length != m2Vals.length || matr[0].length != m2Vals[0].length) { throw new IllegalArgumentException("两个矩阵维度不一致,无法相加"); } //初始化结果矩阵 int[][] addMatr = new int[matr.length][matr[0].length]; //遍历赋值 for(int i = 0; i < matr.length; i++) { for(int j = 0; j < matr[0].length; j++) { addMatr[i][j] = matr[i][j] + m2Vals[i][j]; } } //用二维数组构造Matrix对象后返回 return new Matrix(addMatr); }
内容的提问来源于stack exchange,提问作者NewStudent
相关产品推荐
相关产品推荐

