2017-01-13 22 views
0

行列を乗算する際に問題があります。私のコードはこのように見えますが、それだけで行列を掛けなければなりませんが、それは機能しません。理由はわかりません。Javaで行列を掛けること

class Matrix { 
    // Constructor: create a matrix with only zeroes. 
    public Matrix(int numRows, int numColumns) { 
     this.values = new double[numRows][numColumns]; 
     this.numRows = numRows; 
     this.numColumns = numColumns; 
    } 

    public int getNumRows() { 
     return this.numRows; 
    } 

    public int getNumColumns() { 
     return this.numColumns; 
    } 

    public double getValue(int row, int column) { 
     return this.values[row][column]; 
    } 

    public void setValue(int row, int column, double value) { 
     this.values[row][column] = value; 
    } 

    public Matrix multiply(Matrix b) { 
     // to be implemented 

     int [][] result = new int[Matrix b.length][Matrix b[0].length]; 
     for (int i = 0; i < Matrix b.length; i++) { 
      for (int j = 0; j < Matrix b[0].length; j++) { 
       for (int k = 0; k < Matrix b[0].length; k++) { 
        result[i][j] += Matrix b[i][k] * Matrix b[k][j]; 
       } 
      } 
     } 
     return result 
    } 
} 

public void print() { 
    for (int i = 0; i < this.numRows; i++) { 
     for (int j = 0; j < this.numColumns; j++) { 
      System.out.print(this.values[i][j] + " "); 
     } 
     System.out.println(); 
    } 
} 

private double[][] values; 
private int numRows; 
private int numColumns; 

} 
+0

どのような結果が得られますか? – amaurya123

+0

どのようなエラーが表示されますか?何がうまくいかないの?何を試しましたか? –

+0

あなたの質問にタグをつけたり、コードを書いたりして、読みやすくしてください。それはそれほど難しくはなく、エディタは自動的にそれを行います。 – Eldelshell

答えて

0

結果が配列された状態で、あなたのpublic Matrix multiply(Matrix b)方法はMatrix型のオブジェクトを返す必要がありますが、あなたはreturn result;を行いますint [][] result = new int[Matrix b.length][Matrix b[0].length];

だからあなたのコードをコンパイルすることはできません。

このint[][]からMatrixオブジェクトを作成する必要があります。

+0

ありがとうございます!私はそれの背後に論理を得ていると思う。 – Plinzelplein

0
public Matrix multiply(Matrix a, Matrix b) { 
    Matrix m = new Matrix(a.getNumRows(), b.getNumColumns()); 
    for (int i = 0; i < m.getNumRows(); i++) 
     for (int j = 0; j < b.getNumColumns(); j++) 
      for (int k = 0; k < a.getNumRows(); k++) 
       m.setValue(i, j, a.getValue(i, k) * b.getValue(k, j)); 
    return m; 
} 
+0

ありがとうございました!それは今働いているように見えます:) – Plinzelplein

関連する問題