Ошибка java.lang.ArrayIndexOutOfBoundsException?

Я пытаюсь разбить массив, сохранить одну часть в одном массиве, а другую часть в другом массиве. Затем я пытаюсь перевернуть 2 и сохранить их в новом массиве. вот что у меня есть

public int[] flipArray(){
        int value = 3;
        int[] temp1 = new int[value];
        int[] temp2 = new int[(a1.length-1) - (value+1)];
        int[] flipped = new int[temp1.length+temp2.length];

    System.arraycopy(a1, 0, temp1, 0, value);
    System.arraycopy(a1, value+1, temp2, 0, a1.length-1);
    System.arraycopy(temp2, 0, flipped, 0, temp2.length);
    System.arraycopy(temp1, 0, flipped, temp2.length, temp1.length); 
            return flipped;
    }
    private int[]a1={1,2,3,4,5,6,7,8,9,10};

4 ответа

Вы получаете ArrayIndexOutOfBoundsException, когда хотите получить доступ к элементу массива вне диапазона [0, length - 1];

Вы можете найти проблему самостоятельно, если вы используете отладчик или поместите System.out.println(текст) перед каждым вызовом System.arraycopy, где вы выводите длину массива исходного и целевого массивов и количество элементов для копия

Ваше индексирование и длина массива отключены:

public int[] flipArray(){
    int value = 3;
    int[] temp1 = new int[value];
    int[] temp2 = new int[a1.length - value];
    int[] flipped = new int[a1.length];

    System.arraycopy(a1, 0, temp1, 0, value);
    System.arraycopy(a1, value, temp2, 0, temp2.length);
    System.arraycopy(temp2, 0, flipped, 0, temp2.length);
    System.arraycopy(temp1, 0, flipped, temp2.length, temp1.length); 
    return flipped;
}
private int[]a1={1,2,3,4,5,6,7,8,9,10};

Ключ должен понимать, что System.arraycopy не копирует элемент с последнего индекса.

Эта строка неверна:

System.arraycopy(a1, value+1, temp2, 0, a1.length-1);

Вы начинаете с позиции 4 и хотите скопировать 9 элементов. Это означает, что он пытается скопировать элементы из индекса от 4 до 12 в массиве.

Избавиться от ненужных манипуляций с индексами:

public int[] flipArray(){
int value = 3;
int[] temp1 = new int[value];
int[] temp2 = new int[a1.length - value];
int[] flipped = new int[temp1.length+temp2.length];

System.arraycopy(a1, 0, temp1, 0, value);
System.arraycopy(a1, value, temp2, 0, temp2.length);
System.arraycopy(temp2, 0, flipped, 0, temp2.length);
System.arraycopy(temp1, 0, flipped, temp2.length, temp1.length); 
}
Другие вопросы по тегам