已声明方法仍报‘cannot find symbol’错误:Matrix类代码排查
问题原因分析与修正方案
嘿,这个问题其实挺典型的,咱们一步步来理清楚:
错误根源
你在add方法里写的matrice.rows()和matrice.columns()犯了一个对象类型混淆的错误:
matrice是你在Matrix类中定义的int[][]类型的二维数组,它属于Java的基础数组对象,本身并没有rows()或columns()方法。- 而
rows()和columns()是你为Matrix类定义的成员方法,只能被Matrix类的实例对象调用,不能直接用在数组上。
两种修正方式
方式一:直接使用数组的length属性
既然matrice是二维数组,我们可以直接通过数组的length属性获取行和列数:
int[][] sum = new int[matrice.length][matrice[0].length];
方式二:调用当前Matrix实例的方法
因为add是Matrix类的成员方法,你可以直接调用当前对象的rows()和columns()方法(可以用this显式指代当前实例,也可以省略):
int[][] sum = new int[this.rows()][this.columns()]; // 或者省略this,写法更简洁: // int[][] sum = new int[rows()][columns()];
额外建议:完善矩阵加法逻辑
另外,你当前的代码只是创建了一个空的结果数组,还没有实现真正的矩阵加法逻辑,而且最好先判断两个矩阵的行列数是否匹配(否则会抛出数组越界异常),完整的add方法可以这样写:
public Matrix add(Matrix secondMatrix){ // 先校验矩阵维度是否匹配 if (this.rows() != secondMatrix.rows() || this.columns() != secondMatrix.columns()) { throw new IllegalArgumentException("两个矩阵的行或列数不匹配,无法执行加法操作"); } int[][] sum = new int[rows()][columns()]; // 遍历数组,计算对应元素的和 for (int i = 0; i < rows(); i++) { for (int j = 0; j < columns(); j++) { sum[i][j] = this.matrice[i][j] + secondMatrix.matrice[i][j]; } } Matrix result = new Matrix(sum); return result; }
内容的提问来源于stack exchange,提问作者Stubborn
相关产品推荐
相关产品推荐

