2014-09-13 5 views
0

Я пытаюсь перенести квадратный двумерный массив, и я работал с массивами недолго. Я понимаю, что я запрашиваю индекс, который существует для моего массива a. Но как это возможно? Если я пройду через итерацию, мне кажется, что проблем не должно быть.Почему я получаю ошибку ArrayIndexOutOfBoundsException?

моя программа состоит из двух следующих классов.

public class Transposition { 
    public static void main(String[] args) { 
     Matrix.transpose(new int[][] {new int[] {1, 2}, new int[] {3, 4}, new int[] {5, 6}, new int[] {7, 8}}); 
    } 
} 

public class Matrix { 

    public static void transpose(int[][]a) { 

     int n = a.length; 

     for (int i = 0; i < n; i++) { 
      for (int j = i+1; j < n; j++) { 
       int temp = a[i][j]; 
       a[i][j] = a[j][i]; 
       a[j][i] = temp;     
      } 
     } 
    } 
} 

Я надеюсь, что кто-то может дать мне несколько указателей.

+7

«Я пытаюсь преобразовать квадратный двумерный массив» - ну, вы не * имеете * квадратный двумерный массив. – user2357112

+0

'for (int j = i + 1; j

+0

@ Rp- Это не поможет, 'n' is' 4', но в subarrays только две записи. –

ответ

2

n - длина вашего самого дальнего массива. Это больше, чем массивы, которые составляют его элементы. Таким образом, цикл, когда j равен < n, приведет к ошибке, так как j будет превышать длину подчиненного массива.

Я нахожусь в процессе попытки переставлять квадрата двумерный массив

Как user2357112 says, вы не квадратный массив. У вас есть массив из 4x2 (массив из четырех записей, каждый из которых состоит из массивов из двух записей).

+0

Ответ был прямо у меня под носом! Большое спасибо. – Sebastian

+0

@Sebastian Примите этот ответ. – tbodt

0

В вашем примере ваш int[][] a = new int[4][2] так внутри метода n = 4 так здесь:

a[i][j] = a[j][i];, i получает значения 0,1,2,3 но длина суб-массив 2, который означает, что он имеет индексы 0 и 1. Там вы указали свой индекс за пределы.

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