如何在Driver类中调用mult矩阵乘法方法(禁构造方法)并输出结果?
矩阵乘法调用与代码问题解析
一、调用mult方法的两种可行方式(符合APCSA不允许自定义构造方法的要求)
方式1:利用默认无参构造创建对象调用实例方法
Java会为没有自定义构造方法的类自动提供默认无参构造,这不属于自定义构造方法,符合你的要求。在Tester的main方法中可以这样写:
// 创建Tester2实例(使用Java自动提供的默认构造,未自定义构造方法) Tester2 matrixCalculator = new Tester2(); // 调用mult方法计算矩阵乘积 int[][] resultMatrix = matrixCalculator.mult(a, b); // 打印结果(用Arrays.deepToString输出二维数组) System.out.println(Arrays.deepToString(resultMatrix));
方式2:将mult改为静态方法,直接通过类名调用
如果完全不想创建对象,可以把Tester2中的mult方法修改为静态方法,这样无需实例化就能调用:
修改Tester2的代码:
package tester; public class Tester2 { // 改为static静态方法 public static int[][] mult(int[][] a, int[][] b) { int[][] c = new int[a.length][b[0].length]; for (int row = 0; row < c.length; row++) { for (int col = 0; col < c[row].length; col++) { int cell = 0; // 移到内层循环,每次计算新单元格时重置为0 for (int i = 0; i < b.length; i++) { cell += a[row][i] * b[i][col]; } c[row][col] = cell; } } return c; } }
然后在Tester的main中直接调用:
int[][] resultMatrix = Tester2.mult(a, b); System.out.println(Arrays.deepToString(resultMatrix));
二、原代码的运行问题:无法得到正确结果
你的mult方法存在一个逻辑错误:cell变量定义在最外层循环外面,导致每次计算新的矩阵单元格时,cell会累加之前所有单元格的计算值,最终结果完全错误。
修复方法:把int cell = 0;移到列循环的内层,每次计算一个新的单元格时重置cell为0,确保每个单元格的计算都是独立的,就像上面修改后的代码那样。
修复后,给定的矩阵a和b相乘后,正确结果应为:
[[-3, 23], [14, 6], [-2, 22]]
内容的提问来源于stack exchange,提问作者user19859475
相关产品推荐
相关产品推荐

