簡體   English   中英

矩陣相乘時接收錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM