我是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);
}
}
如果有人可以提供帮助并告诉我我错过了什么会很好,因为我感到非常沮丧,因为我觉得我只是错过了一小部分难题。
答案 0 :(得分:2)
您的测试应如下所示。在原始帖子的测试代码中,您实际上并没有调用您尝试测试的方法。
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);
}
答案 1 :(得分: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;
}
答案 2 :(得分:1)
这是因为你没有删除任何元素。
list.get(list.size()-1);
不会删除元素。
使用
list.remove(list.size()-1)
代替。
答案 3 :(得分:1)
根据Java ArrayList API readFields xs = evalStateT (createA (For :: For Read) readM) xs
main = print (readFields ["14", "42"] :: Maybe (Int, Int))
方法,您只需获取ArrayList中get(int index)
位置的元素。
这是您正在寻找的方法:
index
答案 4 :(得分:-1)
如果将列表作为参数传递给方法,它将成为局部变量。因此,您不是从input
列表中删除元素,而是仅从局部变量list
中删除元素。解决方案是return
来自您方法的本地列表,或直接来自您的&#34;输入&#34;的remove
元素。列表使用相同的代码。原始方法中的x参数是不必要的。