Удаление последнего элемента 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 в вашем исходном методе не нужен.

Другие вопросы по тегам