2013-02-27 95 views
2

我想用兩個不同的靜態方法陣列與靜態方法

  1. double dot(double[]a, double[]b)
  2. double[][] multiply(double[][]a, double[][]b)操縱兩個數組。

我似乎無法弄清楚如何使用靜態方法乘以兩個數組並向用戶輸出值我相信我的Dot產品方法是好的。我知道我需要使用的方法回報我的乘法方法,但林不知道如何表達這個正確

這是我到目前爲止有:

public class LibMatrix { 

    public static void main(String[] args) { 

     double[] a = { 8, 5, 6, 3, 2, 1 }; 
     double[] b = { 9, 8, 4, 1, 4, 7 }; 
    } 

    public static double dot(double[] a, double[] b) { 
     double sum = 0.0; 
     for (int i = 0; i < a.length; i++) 
      sum += a[i] * b[i]; 
     return sum; 

    } 

    public static double[][] multiply(double[][] a, double[][] b) { 
     int n = 6; 
     double[][] c = new double[n][n]; 
     for (int i = 0; i < n; i++) 
      for (int j = 0; i < n; i++) 
       c[i][j] = a[i][j] * b[i][j]; 
     return a; 

    } 
} 
+0

第二種方法是矩陣(二維數組),但你的「靜態數組」是一維... – SJuan76 2013-02-27 17:32:24

+0

我不知道我明白這個問題;你不能在'main'中調用方法,引用返回值並迭代它們嗎? – 2013-02-27 17:32:31

+0

'return a;' - >'return c;' – 2013-02-27 17:35:05

回答

0

下面是一些更正:

public class LibMatrixTests 
{ 
    static class LibMatrix { 
     public static double dot(double[] a, double[] b) { 
     double sum = 0.0; 
     for (int i = 0; i < a.length; i++) 
      sum += a[i] * b[i]; 
     return sum; 
     } 
     public static double[][] mul(double[][] a, double[][] b) { 
     double[][] c = new double[a.length][a[0].length]; 
     for (int i = 0; i < a.length; i++) 
      for (int j = 0; j < a[i].length; j++) 
       c[i][j] = a[i][j] * b[i][j]; 
     return a; 
     } 
    } 

    public static void main(String[] args) { 
     double[] a = { 8, 5, 6, 3, 2, 1 }; 
     double[] b = { 9, 8, 4, 1, 4, 7 }; 
     double[][] c = { a, b }; 
     double[][] d = { b, a }; 
     double  e = LibMatrix.dot(a, b); 
     double[][] f = LibMatrix.mul(c, d); 
     System.out.println(e); 
     for(double[] g : f) { 
     for(double h : g) { 
      System.out.print(h + ", "); 
     } 
     System.out.println(); 
     } 
    } 
} 

輸出:

154.0 
8.0, 5.0, 6.0, 3.0, 2.0, 1.0, 
9.0, 8.0, 4.0, 1.0, 4.0, 7.0, 
+0

非常感謝你,這正是我想讓程序現在要做的事情,現在可以跟蹤並查看你是如何做到的:) – user2092325 2013-02-27 17:50:25

+0

使用diff實用程序,因爲您錯誤地將索引i和j導入到引起IndexOutOfBoundsException的循環中 – Aubin 2013-02-27 17:52:38

3

沒有足夠的代表處發表評論,但在第二種方法的返回值應該是C

測試:

double [][] a = new double [6][6]; 
double [][] b = new double [6][6]; 

for(int i = 0; i< a.length;i++){ 
    for(int j = 0; j< a.length;j++){ 
     a[i][j] = 3; 
     b[i][j] = 2; 
    } 
} 
d = multiply(a,b); 

這將返回充滿6S所以你的方法是否正常工作一個6x6的矩陣。

d = [6, 6, 6, 6, 6, 6, 
    6, 6, 6, 6, 6, 6, 
    6, 6, 6, 6, 6, 6, 
    6, 6, 6, 6, 6, 6, 
    6, 6, 6, 6, 6, 6, 
    6, 6, 6, 6, 6, 6] 
0
在multiply方法

,第二個循環是錯誤的,J始終爲0,你應該返回℃,而不是的一個

試試這個

public static double[][] multiply(double[][] a, double[][] b) { 
    int n = 6; 
    double[][] c = new double[n][n]; 
    for (int i = 0; i < n; i++) 
     for (int j = 0; j < n; j++) 
      c[i][j] = a[i][j] * b[i][j]; 
    return c; 

}