Почему я получаю исключение ArrayIndexOutOfBounds? - PullRequest
1 голос
/ 26 октября 2010
private void equal_AxB() { 
  int x = matrix_A.length;
  int y = matrix_B[0].length;
  matrix_C = new double[x][y];
   for(int i = 0; i < x; i++) {
            for(int j = 0; j < y; j++) {
              for(int k = 0; k < y; k++){
                matrix_C[i][j] += matrix_A[i][k]*matrix_B[k][j];
          }
        }  
      }

  return;
 }

matrix_A:

2 3
2 3
2 3

matrix_B:

2 3 4
2 4 3

Ответы [ 3 ]

1 голос
/ 26 октября 2010

Вы извлекли первый индекс, связанный с matrix_A, и второй из matrix_B [0];у вас нет гарантии, что оставшиеся границы каким-либо образом относятся к ним, поэтому утверждение:

matrix_C[i][j] += matrix_A[i][k]*matrix_B[k][j];

, которое обращается ко всем измерениям A и B, может получить доступ за пределами любого из измерений любого массива, кроме A [i] и B [0] [j].

1 голос
/ 26 октября 2010

Я вижу две проблемы:

  • Необходимо убедиться, что количество столбцов A равно количеству строк B.Если это не так, вы не можете умножить матрицы.
  • Ваш цикл k должен варьироваться от 0 до N, где N - количество столбцов матрицы A, в настоящее время вы меняетеэто до количества столбцов матрицы B.
0 голосов
/ 26 октября 2010

вы написали

int y = matrix_B [0] .length;

, поскольку вы пытаетесь получить длину подмассива matrix_b

, это вернет3 как длина, так что x и y теперь имеют оба значения 3, но ваш matrix_a является матрицей 2X3, что не удастся, если вы попытаетесь найти matrix_A по индексу 2.

попытайтесь с int y = matrix_B.length;

это будет работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...