Ошибка 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);
}