为什么我的程序没有删除 "all"?

Why isn't my program removing "all"?

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

这是我的代码:

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

有什么想法吗?

您正在确定 size() 在填写列表之前

填完列表后将其放在后面(即毕竟 add()

int spot = ray.size() - 1;

从列表中删除项目的另一种方法是使用 Iterator:

for(Iterator<String> i = ray.iterator(); i.hasNext(); ) {
    if(i.next().equalsIgnoreCase("all")) {
       i.remove();
    }
}

这样您就不必跟踪您在列表中关于已删除项目的位置。

两个问题。您在数组中有任何值之前设置 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();

}