ArrayIndexOutOfBound Исключение при изменении порядка расположения массивов с многомерными массивами: - PullRequest
0 голосов
/ 28 октября 2019

Итак, я в настоящее время играюсь с многомерными массивами (2D) и пытаюсь изменить порядок каждого массива в двумерном массиве.

Итак, у меня установлен 2D-массив как: int firstArray [] [] = {{5,6,7,8,9,10}, {11,12,13,14,15,16}}

Я вручную просмотрел проблемучтобы увидеть, где я мог пойти не так, чтобы увидеть, какая часть моего кода в конечном итоге выйдет за пределы моих циклов for. Часть -1 также застала меня врасплох.

Я начал делать реверсы на обычном одномерном массиве и пытался применить ту же концепцию к многомерным массивам.

class Test2 {

    public static void main (String[] args) {
        int firstArray[][] = {{5,6,7,8,9,10}, {10,11, 12, 13, 14, 15}};
        System.out.println("FIRST ARRAY");
        display(firstArray);
    }

    public void display(int [][]num) {
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length/2; j++) {
                int temp = num[i][j];
                num[i][j] = num[i][num.length-1-j];
                num[i][num.length-1-j] = temp;
            }
        }
        for (int a = 0; a < num.length; a++) {
            for (int b = 0; b < num[a].length; b++) {
                System.out.print(num[a][b] + "\t");
            }
        System.out.println();
        }
    }
}

Iхочу, чтобы вывод с использованием моего метода отображения был в основном обратным к массивам в моем 2-м массиве:

10 9 8 7 6 5

15 14 13 12 11 10

Проблема, которую я получаю, это

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: -1 ArrayIndexOutOfBoundsException: -1

в Test2.display (Test2.java: 30)

на Test2.main (Test2.java:20)

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Обратите внимание, что вы написали num [i] [num.length-1-j];num.length-1-j в основном 2 - 1 -j.

public static void display(int [][]num) {
    for (int i = 0; i < num.length; i++) {
        for (int j = 0; j < num[i].length/2 ; j++) {
            int temp = num[i][j];
            num[i][j] = num[i][num[i].length-1-j];
            num[i][num[i].length-1-j] = temp;
        }
    }
    for (int a = 0; a < num.length; a++) {
        for (int b = 0; b < num[a].length; b++) {
            System.out.print(num[a][b] + "\t");
        }
    System.out.println();
    }
}
0 голосов
/ 28 октября 2019

Вы используете длину неправильного измерения.
С num.length вы используете количество строк, а не количество столбцов текущей строки.
Вам нужно изменить это значение на num[i].length.

public static void display(int [][]num) {
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length/2; j++) {
                int temp = num[i][j];
                num[i][j] = num[i][num[i].length-1-j];
                num[i][num[i].length-1-j] = temp;
            }
        }
        for (int a = 0; a < num.length; a++) {
            for (int b = 0; b < num[a].length; b++) {
                System.out.print(num[a][b] + "\t");
            }
        System.out.println();
        }
}
...