2015-09-09 2 views
0

Я пытаюсь создать метод, который принимает 2 двухмерном массиве в качестве параметров и печатает их массив умножения (подобно методу умножения матрицы в методе). похоже, что он застрял где-то в бесконечном цикле во время выполнения. любая модификация?Метод умножения 2 двумерного массива

public static void multiplicationOfArray(int[][] matrix1, int[][] matrix2) { 
    int row1 = matrix1.length; 
    int column1 = matrix1[0].length; 
    int row2 = matrix2.length; 
    int column2 = matrix2[0].length; 
    int[][] resultmatrix = new int[row1][column2]; 

    if (column1 == row2) { 
     for (int i = 0; i < row1; row1++) { 
      for(int j = 0; j < column2; j++) { 
       for (int k = 0; k < column1; k++) { 
        resultmatrix[i][j] += matrix1[i][k] * matrix2[k][j]; 
       } 
      } 
     } 

     for (int row = 0; row < row1; row++) { 
      for (int column = 0; column < column2; column++) { 
       System.out.println(resultmatrix[row][column] + " "); 
      } 
      System.out.println(); 
     } 
    } 
} 
+0

'for (int i = 0; i

ответ

1

Если размеры не правильно/действителен, то вы можете бросить исключение. Вы также можете попробовать этот метод -

public static double[][] multiply(double[][] A, double[][] B) { 
     int mA = A.length; 
     int nA = A[0].length; 
     int mB = B.length; 
     int nB = B[0].length; 
     if (nA != mB) throw new RuntimeException("Illegal matrix dimensions."); 
     double[][] C = new double[mA][nB]; 
     for (int i = 0; i < mA; i++) 
      for (int j = 0; j < nB; j++) 
       for (int k = 0; k < nA; k++) 
        C[i][j] += A[i][k] * B[k][j]; 
     return C; 
    } 

Полный код можно найти here.

+0

Спасибо, очень полезная ссылка! :) – izengod

+0

O (n^3) решение. Вы можете попытаться оптимизировать это. Читайте о [Strassen algo] (https://en.wikipedia.org/wiki/Strassen_algorithm), который пытается решить его в O (n^2.8) –

0

Ваши условия для цикла немного перепутаны. Например, этот цикл:

for (int i = 0; i < row1; row1++) { 

прекращается только тогда, когда i больше row1 однако, ни в одной точке в оставшемся коде или петли вы увеличиваете значение i или уменьшить значение row1, поэтому условие i >= row1 никогда не будет удовлетворена.

Попробуйте вместо этого:

public static void multiplicationOfArray(int[][] matrix1, int[][] matrix2) { 
    int row1 = matrix1.length; 
    int coloumn1 = matrix1[0].length; 
    int row2 = matrix2.length; 
    int coloumn2 = matrix2[0].length; 
    int[][] resultmatrix = new int[row1][coloumn2]; 

    if (coloumn1 == row2) { 
     for (int i = 0; i < row1; i++) { 
      for(int j = 0; j < coloumn2; j++) { 
       for (int k = 0; k < coloumn1; k++) { 
        resultmatrix[i][j] += matrix1[i][k] * matrix2[k][j]; 
        } 
       } 
      } 
     for (int row = 0; row < row1; row++) { 
      for (int coloumn = 0; coloumn < coloumn2; coloumn++) { 
       System.out.println(resultmatrix[row][coloumn] + " "); 
      } 
      System.out.println(); 
     } 
    } 
} 
Смежные вопросы