为什么我的程序不能删除“全部”?

时间:2015-01-20 00:06:51

标签: java arraylist

我的问题是,当我输出这段代码时,它没有输出我想要删除的所有"全部"。它输出与第一个印刷语句完全相同的内容。

这是我的代码:

// 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());
}
}

有什么想法吗?

3 个答案:

答案 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();

}