2

2つの異なる静的メソッドを使用して2つの配列を操作しようとしています

  1. double dot(double[]a, double[]b)
  2. double[][] multiply(double[][]a, double[][]b)

静的メソッドを使用して2つの配列を乗算し、そこに値をユーザーに出力する方法がわからないようですが、内積メソッドは優れていると思います。乗算メソッドにreturnメソッドを使用する必要があることはわかっていますが、これを正しく表現する方法がわかりません。

これが私がこれまでに持っているものです:

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;

    }
}
4

3 に答える 3

3

コメントするのに十分な担当者がいませんが、2番目のメソッドの戻り値は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);

これにより、6で満たされた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]
于 2013-02-27T17:34:50.217 に答える
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, 
于 2013-02-27T17:42:40.437 に答える
0

multiplyメソッドでは、2番目のループが間違っており、jは常に0であるため、aの代わりにcを返す必要があります。

これを試して

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;

}
于 2013-02-27T17:50:12.320 に答える