2013-02-27 8 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

+0

Я не уверен, что я понимаю вопрос; Вы не можете вызывать методы в 'main', ссылаться на возвращаемые значения и перебирать их? –

+0

'return a;' -> 'return c;' –

ответ

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

Большое спасибо, что именно то, что я хотел, чтобы программа теперь выполняла время для Trace и посмотрела, как вы это сделали :) – user2092325

+0

Используйте утилиты diff, потому что вы неправильно использовали индекс i и j для циклов, вызывающих IndexOutOfBoundsException – Aubin

3

Не хватает респ комментировать, но ваше возвращаемое значение во втором методе должен быть с

Тест:

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); 

Это возвращает 6x6 матрицу, заполненную 6с, таким образом метод работает правильно.

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

в многосвязности методе, второй цикл не так, 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; 

} 
Смежные вопросы