EDIT 3: это является причиной проблемы:Java массив сортировки (Что я делаю неправильно)
Для removeArrayElement (первая версия), его возвращение ToArray (новый пункт [0]), который выполняет нуль элемент в конце, но с новым методом он возвращает toArray (arr), который не выполняет нуль, но вы можете: создать массив типов типа T, т. е. новый T [0], так что это замена ? вместо «передавая массив снова», чтобы избавиться от нулевого элемента в конце
Старая проблема:
Я недавно обновлен, как я был массив сортировки путем создания одного главного метода обработки (с помощью орудий родовых типов) только метод aftermath дает мне массив ошибок за пределами границ.
Есть ли что-нибудь, что я пропустил?
Старые методы:
private static Item[] insertTabItem(Item[] a, int pos, Item item) {
Item[] result = new Item[a.length + 1];
for(int i = 0; i < pos; i++)
result[i] = a[i];
result[pos] = item;
for(int i = pos + 1; i < a.length + 1; i++)
result[i] = a[i - 1];
return result;
}
private static Item[] removeArrayItem(Item[] arr, Item item) {
List<Item> list = new ArrayList<Item>(Arrays.asList(arr));
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == item) {
list.remove(i);
}
}
return list.toArray(new Item[0]);
}
новые методы (дающие java.lang.ArrayIndexOutOfBoundsException)
public static <T> T[] insertArrayElement(T[] arr, int pos, T item) {
final int N = arr.length;
T[] result = Arrays.copyOf(arr, N + 1);
for(int i = 0; i < pos; i++)
result[i] = arr[i];
result[pos] = item;
for(int i = pos + 1; i < N + 1; i++)
result[i] = arr[i - 1];
return result;
}
public static <T> T[] removeArrayElement(T[] arr, T item) {
List<T> list = new ArrayList<T>(Arrays.asList(arr));
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == item) {
list.remove(i);
}
}
return list.toArray(arr);
}
EDIT:
После прочтения некоторых из ответа я изменил removeArrayElement к настоящему времени:
public static <T> T[] removeArrayElement(T[] arr, T item) {
for (Iterator<T> iterator = list.iterator(); iterator.hasNext();) {
T t = iterator.next();
if (t == item) {
iterator.remove();
}
}
return list.toArray(arr);
}
, но он все еще по какой-то причине посылает эту: java.lang.ArrayIndexOutOfBoundsException
edit2: Полный исполняемый
bankContents[bankSlots[0]] = Utils.removeArrayElement(bankContents[bankSlots[0]], newbankVarient);
Когда newBankVarient есть = bankContents [bankSlots [0]] [1] и его удаление, система из массива ПОСЛЕ является:
"[var, var, var, null]
Не используйте 'list.remove (i)' внутри цикла for. – vikingsteve
Он также использовался в старом методе, но по какой-то причине новый метод запутывается, почему это так, btw его remove'i 'субъект цикла, его не удаляя один и тот же элемент снова и снова –
Чтобы уточнить, что @vikingsteve говорит; вы можете использовать другой целочисленный список, в котором будут храниться значения 'i', для которых' list.get (i) == item' является истинным, а затем итератором в новом списке и удаляет все 'i' в списке – Laazo