当前位置: 首页 > 面试题库 >

ArrayList.remove不在循环中工作

叶冥夜
2023-03-14
问题内容

我有以下代码-

import java.util.ArrayList;

public class ArrayListExp{
    public static void main (String[] args){

        ArrayList<String> name = new ArrayList<String>();

        name.add("Chris");
        name.add("Lois");
        name.add("Meg");
        name.add("Meg");
        name.add("Brain");
        name.add("Peter");
        name.add("Stewie");

        System.out.println(name);

        for ( int i = 0;  i < name.size(); i++){
            String oldName = name.get(i);
            if(oldName.equals("Meg"))
            {
                name.remove(i);
            }
        }

        System.out.println(name);
    }
}

但这给了我输出-

[Chris, Lois, Meg, Meg, Brain, Peter, Stewie]
[Chris, Lois, Meg, Brain, Peter, Stewie]

我不明白这一点,为什么不消除它,Meg但是Meg在这种情况下我只尝试了一种。当我Meg最后添加少量内容时,我Meg不会从中删除ArrayList。为什么?


问题答案:

删除第一个“ Meg”时,即为索引i=2。然后增加,但是由于“ Meg”之一已被删除,因此现在name.get(3)是“
Brain”。因此,您实际上没有检查第二个“ Meg”。

解决问题。您可以在删除元素时减少索引:

public class ArrayListExp{
    public static void main (String[] args){

        ArrayList<String> name = new ArrayList<String>();

        name.add("Chris");
        name.add("Lois");
        name.add("Meg");
        name.add("Meg");
        name.add("Brain");
        name.add("Peter");
        name.add("Stewie");

        System.out.println(name);

        for ( int i = 0;  i < name.size(); i++){
            String oldName = name.get(i);
            if(oldName.equals("Meg"))
            {
                name.remove(i);
                i--;
            }
        }

        System.out.println(name);
    }
}


 类似资料:
  • 这个方法的问题是它总是返回零。看起来没有使用它的参数。然而,如果我按照下面的方式来写,那么一切都运行得很好。有没有人知道为什么第一种方法不起作用?

  • 我想做的是制作一个快速而肮脏的幻灯片。我的想法是让master div包含一个空白的“master”img标记和一组div,每个div都包含自己的img和span标记。每个图像的源依次设置为主img的源。因此,我开始迭代每个图像,并尝试使用setTimeout()和2秒延迟将其源设置为主img的源。我遇到的问题是,编写代码似乎要等待两秒钟,并且只显示序列中的最后一幅图像。 如果我能得到第二双眼睛来

  • 我一直在研究的一个函数有一个问题。这个函数的目的是取两组文本输入框中的日期,计算两者之间的差异,然后将该天数放入第三组框中。我的函数如下所示。 变量在开头引用的三个数组只包含我希望访问的表单元素的名称。我已经用一个警告框测试了start、end和out变量,如果代码中没有Show Difference注释下的行,循环运行良好。我也检查了所有的名字,确保他们都匹配。此外,我已经手动运行页面八次(有八

  • 我正在看freeCodeCamp的一个关于flappy bird游戏的教程https://www.youtube.com/watch?v=pufko5eg8nc 但我正在使用一个类来学习更多关于它的知识。 问题是,图像没有加载到draw()函数的循环中。如果我将drawImage()放在循环之外(像其他图像一样),那么它们就可以工作。 控制台中没有错误,for循环中的两个图像没有出现,我只是不明白

  • 问题内容: 我在一起有多个循环,而在最内部的循环中有一个睡眠。例如: 如果您运行该代码,则可能需要等待1秒钟然后再次休眠直到结束,才能获得价值。 但是结果是不同的,它等待10秒钟并打印整行,然后再次等待打印下一行。 我发现打印末尾的逗号导致了此问题。我该如何解决? 问题答案: 由于存在逗号,因此输出缓冲到a为止。 您应在每次打印或使用后冲洗并冲洗缓冲区。 定义您的打印方法: 在行的末尾打印一个