Удаление последнего элемента ArrayList
Я новичок в Java, и я застрял в упражнении, которое я пытался решить более недели, и я не знаю, что я делаю неправильно.
Мне нужно удалить последние элементы ArrayList, целое число в этом случае.
Проблема в том, что когда я запускаю тест, он все равно возвращает старые значения.
public static void removeLastOccurrence(int x, ArrayList<Integer> list) {
if (list != null && !list.isEmpty()) {
list.remove(list.size()-1);
}
}
Я также попытался использовать list.remove(list.lastIndexOf(x));
Но он все еще возвращает тот же список, когда я запускаю этот тест.
public class UTest{
@Test
public void testMultipleLast() {
ArrayList<Integer> input = new ArrayList<Integer>(asList(1,1,3,5,7,1,5,9,1));
ArrayList<Integer> result = new ArrayList<Integer>(asList(1,1,3,5,7,1,5,9));
Solution.removeLastOccurence(1, input);
assertEquals(result, input);
}
}
Было бы неплохо, если бы кто-то мог помочь и сказать мне, что мне не хватает, потому что это очень расстраивает, так как у меня такое ощущение, что я просто скучаю по маленькому кусочку головоломки.
5 ответов
Ваш тест должен быть как ниже. В тестовом коде исходного сообщения вы фактически не вызываете метод, который пытаетесь протестировать.
public class UTest
{
@Test
public void testMultipleLast() {
ArrayList<Integer> input = new ArrayList<Integer>(asList(1,1,3,5,7,1,5,9,1));
ArrayList<Integer> result = new ArrayList<Integer>(asList(1,1,3,5,7,1,5,9));
// int x = ?
ArrayList<Integer> actual = SomeClass.removeLastOccurrence(x, input)
assertEquals(result, actual);
}
}
и removeLastOccurrence()
метод может сделать следующее
if(list != null && !list.isEmpty()){
list.remove(list.size() - 1);
}
Вы должны использовать:
list.remove(list.size()-1);
И верните свой новый список, чтобы вы могли использовать:
public static ArrayList<Integer> removeLastOccurrence(int x, ArrayList<Integer> list) {
if (list != null && !list.isEmpty()) {
list.remove(list.size()-1);
}
return list;
}
Это потому, что вы не удаляете какие-либо элементы.
list.get(list.size()-1);
не удаляет элементы.
использование
list.remove(list.size()-1)
вместо.
В соответствии с Java ArrayList API с get(int index)
Метод вы просто получите элемент в index
позиция в вашем ArrayList. Это метод, который вы ищете:
public static void removeLastOccurrence(int x, ArrayList<Integer> list) {
if (list != null && !list.isEmpty()) {
list.remove(list.size()-1);
}
}
Если вы передадите свой список в качестве аргумента методу, он станет локальной переменной. Поэтому вы не удаляете элемент из вашего input
список, но только из локальной переменной list
, Решение состоит в том, чтобы return
этот локальный список из вашего метода или remove
элемент прямо из вашего "входного" списка, используя тот же код. Параметр x в вашем исходном методе не нужен.