Моя функция умножения матриц возвращает пустые или неправильные результаты - PullRequest
0 голосов
/ 06 апреля 2019

Функция, которую я написал для умножения матриц, неправильно выдает или дает пустую.Ему удалось дать мне один правильный вывод, хотя я больше не могу найти этот массив.

Когда я ввел
int[][] test = new int[][]{ {2, 4}, {5, 3}, {3, 5} }; int[][] test2 = new int[][]{ {3, 4, 2}, {5, 1, 2} };
, он возвращает массив нулей


    int[][] toRet = new int[arr1.length][arr2[0].length];

    for(int i = 0; i < arr1.length; i++){
      for(int j = 0; j < arr2[0].length; j++){
        for(int k = 02; k < arr1[0].length; k++){
          toRet[i][j] += arr1[i][k] * arr2[k][j];
        }
      }
    }

    return toRet;
  }```  

It worked for a minute and I didn't change anything but my test.

1 Ответ

0 голосов
/ 06 апреля 2019

Ваш 3-й цикл неверен. Вы инициализировали k с 2, это должно быть k = 0. Сейчас беру пример. Ваша матрица

int[][] test = new int[][]{
      {2, 4},
      {5, 3},
      {3, 5}
    };

arr1 [0] .length вернет 2, так как есть только 2 элемента, а k вернет false. Таким образом, ваш третий цикл выйдет без суммирования и умножения. Вот почему вы получаете все элементы 0. Измените ваш третий цикл на k = 0, который выглядит следующим образом:

for(int i = 0; i < arr1.length; i++){
      for(int j = 0; j < arr2[0].length; j++){
        for(int k = 0; k < arr1[0].length; k++){
          toRet[i][j] += arr1[i][k] * arr2[k][j];
        }
      }
    }
...