Java报错:Determinant类中getValue等方法未定义的解决方法
解决方案
问题根源
Determinant类既没有继承包含getValue、getColumnNumber等方法的BasicOperations/Matrix类,也没有持有Matrix或BasicOperations的实例,所以调用this.getValue()时,编译器找不到对应方法。
方案一:继承BasicOperations类
让Determinant继承BasicOperations,直接复用其所有属性和方法:
package Matrix; public class Determinant extends BasicOperations{ // 必须实现构造方法,调用父类构造器初始化矩阵参数 public Determinant(int n, int m){ super(n, m); } public double get2x2Determinant() { if(this.getColumnNumber() * this.getRowNumber() == 4) { double det = (this.getValue(1, 1) * this.getValue(2, 2)) - (this.getValue(1, 2) * this.getValue(2, 1)); return det; } else { return 0; } } }
- 优势:代码改动最小,Determinant直接具备矩阵的所有基础操作能力。
- 适用场景:需要把行列式计算作为矩阵的一种扩展功能时使用。
方案二:采用组合模式(推荐)
让Determinant类持有一个BasicOperations实例,专注于行列式计算职责:
package Matrix; public class Determinant{ private final BasicOperations matrix; // 通过构造方法传入已初始化的矩阵实例 public Determinant(BasicOperations matrix){ this.matrix = matrix; } public double get2x2Determinant() { if(matrix.getColumnNumber() * matrix.getRowNumber() == 4) { double det = (matrix.getValue(1, 1) * matrix.getValue(2, 2)) - (matrix.getValue(1, 2) * matrix.getValue(2, 1)); return det; } else { return 0; } } }
- 使用示例:
// 先创建并初始化矩阵 BasicOperations mat = new BasicOperations(2,2); mat.putTo(1,1,2.0); mat.putTo(1,2,3.0); mat.putTo(2,1,4.0); mat.putTo(2,2,5.0); // 传入矩阵计算行列式 Determinant detCalc = new Determinant(mat); System.out.println(detCalc.get2x2Determinant()); // 输出:-2.0
- 优势:符合单一职责原则,Determinant只负责计算行列式,矩阵操作由BasicOperations处理,代码耦合度更低,扩展性更好。
内容的提问来源于stack exchange,提问作者refik
相关产品推荐
相关产品推荐

