为什么我的程序没有删除 "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();
}
我的问题是,当我输出这段代码时,它没有输出我想要删除 "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();
}