我的问题是,当我输出这段代码时,它没有输出我想要删除的所有"全部"。它输出与第一个印刷语句完全相同的内容。
这是我的代码:
// RemoveAll
// Spec: To remove the "all"
// ArrayList remove() exercise
import java.util.ArrayList;
public class RemoveAll
{
public static void main(String args[])
{
ArrayList<String> ray;
ray = new ArrayList<String>();
int spot = ray.size() - 1;
ray.add("all");
ray.add("all");
ray.add("fun");
ray.add("dog");
ray.add("bat");
ray.add("cat");
ray.add("all");
ray.add("dog");
ray.add("all");
ray.add("all");
System.out.println(ray);
System.out.println(ray.size());
// add in a loop to remove all occurrences of all
while (spot >= 0)
{
if (ray.get(spot).equalsIgnoreCase("all"))
{
ray.remove(spot);
}
spot = spot - 1;
}
System.out.println("\n" + ray);
System.out.println(ray.size());
}
}
有什么想法吗?
答案 0 :(得分:4)
您在填写清单之前确定size()
在填写完列表后(即在所有add()
之后)
int spot = ray.size() - 1;
答案 1 :(得分:1)
从列表中删除项目的另一种方法是使用Iterator
:
for(Iterator<String> i = ray.iterator(); i.hasNext(); ) {
if(i.next().equalsIgnoreCase("all")) {
i.remove();
}
}
通过这种方式,您无需跟踪列表中有关已删除项目的位置。
答案 2 :(得分:1)
两个问题。你在数组中有任何值之前设置spot的大小,所以当你到达时它的值为-1
while (spot >= 0)
当你迭代它时,你正在改变(修改)数组,这将导致各种错误。你想要这样做的方法是使用迭代器
Iterator iter = ray.iterator();
while(iter.hasNext()){
String cur = iter.next();
//logic to determin if you need to remove
iter.remove();
}