[英]Receiving errors when multiplying matrices
在我的計算機科學 A AP 中,我們必須使用兩個類進行矩陣乘法。
我一直在使用 function 將矩陣相乘並得到乘積時遇到問題。 這是第一個 class,聲明並初始化矩陣:
public class Main {
public static void main(String[] args) {
int r1 = 3, c1 = 4;
int r2 = 4, c2 = 2;
int[][] a = {{1, 2, -2, 0}, {-3, 4, 7, 2}, {6, 0, 3, 1}};
int[][] b = {{-1, 3}, {0, 9}, {1, -11}, {4, -5}};
// So there are the matrices
int[][] mult = matrixMult(a, b, r1, c1, c2);
displayProduct(product);
}
public static void displayProduct(int[][] product) {
System.out.println("");
for (int[] row : product) {
for (int column : row) {
System.out.println(column + " ");
}
System.out.println();
}
}
}
如果矩陣成一個矩陣,這就是我打印產品的方式。
然后這是第二個 class 應該乘以矩陣:
public class MatrixMult {
public static int[][] matrixMult(int[][] a, int[][] b) {
int[][] product = new int[r1][c2];
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
for (int k = 0; k < c1; k++) {
product[i][j] += a[i][k] * b[k][j];
}
}
}
return product;
}
}
我嘗試運行代碼時收到的錯誤是:
Main.java:14: error: cannot find symbol
int[][] mult = matrixMult(a, b, r1, c1, c2);
^
symbol: method matrixMult(int[][],int[][],int,int,int)
location: class Main
Main.java:16: error: cannot find symbol
displayProduct(product);
^
symbol: variable product
location: class Main
MatrixMult.java:9: error: cannot find symbol
int[][] product = new int[r1][c2];
^
symbol: variable r1
location: class MatrixMult
MatrixMult.java:9: error: cannot find symbol
int[][] product = new int[r1][c2];
^
symbol: variable c2
location: class MatrixMult
MatrixMult.java:10: error: cannot find symbol
for (int i = 0; i < r1; i++) {
^
symbol: variable r1
location: class MatrixMult
MatrixMult.java:12: error: cannot find symbol
for (int j = 0; j < c2; j++) {
^
symbol: variable c2
location: class MatrixMult
MatrixMult.java:14: error: cannot find symbol
for (int k = 0; k < c1; k++) {
^
symbol: variable c1
location: class MatrixMult
變量聲明位於錯誤的類和方法中。 以下聲明:
int r1 = 3, c1 = 4;
int r2 = 4, c2 = 2;
int[][] a = {{1, 2, -2, 0}, {-3, 4, 7, 2}, {6, 0, 3, 1}};
int[][] b = {{-1, 3}, {0, 9}, {1, -11}, {4, -5}};
這些在Main.main
中聲明(Main class,main 方法),而您嘗試在MatrixMult.matrixMult
中調用它們。 相反,在matrixMult
(方法)中聲明它們或在 MatrixMult(類)中聲明它們,但將它們設為 static。
另一個問題是你寫了matrixMult(a, b, r1, c1, c2);
,當 matrixMult 只需要兩個參數時,將a, b, r1, c1, c2
作為參數傳遞: public static int[][] matrixMult(int[][] a, int[][] b)
。
堆棧跟蹤告訴您:它找不到symbol: method matrixMult(int[][],int[][],int,int,int
。所以只需重寫public static int[][] matrixMult(int[][] a, int[][] b)
public static int[][] matrixMult(int[][] a, int[][] b, int r1, c1, c2)
。
請記住,matrixMult 並不“知道”這些變量是什么,因為它們是在不同的方法中聲明的。 只有當它們作為參數傳入時它才知道它們。
代碼審查。 您的代碼可能如下所示:
public class MatrixMult {
public static int[][] matrixMult(
// correct number, type and order of variables
int[][] a, int[][] b, int r1, int c1, int c2) {
int[][] product = new int[r1][c2];
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
for (int k = 0; k < c1; k++) {
product[i][j] += a[i][k] * b[k][j];
}
}
}
return product;
}
}
public class Main {
public static void main(String[] args) {
int r1 = 3, c1 = 4;
int r2 = 4, c2 = 2;
int[][] a = {{1, 2, -2, 0}, {-3, 4, 7, 2}, {6, 0, 3, 1}};
int[][] b = {{-1, 3}, {0, 9}, {1, -11}, {4, -5}};
int[][] mult = matrixMult(a, b, r1, c1, c2);
displayProduct(mult);
}
public static void displayProduct(int[][] product) {
for (int[] row : product) {
for (int column : row) {
// print as a single line without
// a line separator at the end
System.out.print(column + " ");
}
// print a line separator
System.out.println();
}
}
}
Output:
-3 43
18 -60
1 -20
另請參閱:使用流的矩陣乘法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.