Может быть, проще использовать ArrayList и преобразовать ваши массивы как Integer вместо примитивного int.
- Первая проблема здесь в параметре
position[]
в функции delete
: вы можете получить IndexOutOfBoundsException
, потому что любой, вызывающий эту функцию, может передать список позиций, которых не может быть в массиве num []
Например:
массив num[]
имеет размер 4 и кто-то передает позицию {1,6}, в этом случае шестой индекс не существует в num [])
Вторая проблема заключается в том, чтобы гарантировать удаление правильного индекса.
Например, если num {34, 53, 33, 64} и позиция {0, 1}, представляющая индекс для Если удалить, вы ожидаете, что числа 34 и 53 будут удалены, но после удаления индекса 0 53 становится индексом 0, а не индексом 1.
Таким образом, здесь можно изменить позицию сортировки , поэтому он предотвращает эту проблему.
Вот пример кода для иллюстрации функции удаления:
Integer num[]... //Using Integer instead of int will be use to remove items using ArrayList
public void delete(Integer[] position){ //position[] being Integer instead of int will be easier to rever sorting
//
//Reversing order of position[] to prevent problem 2
Arrays.sort(position, Collections.reverseOrder());
//
ArrayList<Integer> objArrayListMyNumbers = Array.asList(num);
//
// Iterate through every element of position
for(Integer i : position){
//
//It's better surround by try and catch, because of the problem 1 (IndexOutOfBoundsException)
try{
objArrayListMyNumbers.remove(i);
}
catch(IndexOutOfBoundsException e){
e.printStack();
}
}
//
//Gets a new Array with items removed
num = new Integer(objArrayListMyNumbers.size());
num = objArrayListMyNumbers.toArray();
}