首页 > 解决方案 > 删除 a 的元素ArrayList-Java

问题描述

对于 java 家庭作业,我们被分配初始化一个包含字典单词的字符串数组列表。如果单词不是我们生成的长度,那么它们将从 ArrayList 中删除。以下代码不起作用。

public static int randLength() {
        int range=(RAND_MAX-RAND_MIN)+1;
        int randomNum=(int)(Math.random()*range)+RAND_MIN;
        return randomNum;
    }

此功能正常工作。

int randomLength=randLength();
      System.out.println(randomLength);
      for(int i=0;i<dictionaryList.size()-1;i++) {
          if(dictionaryList.get(i).length()!=randomLength) {
              System.out.println("The lucky word is " + dictionaryList.get(i));
              dictionaryList.remove(i);
          }
      }

然而,事实并非如此。dictionaryList 是使用单词文本文件初始化的。我的是,“apples”“beer”“charlie”“dogs”“elephant”“fogerty” 在某些情况下,上面的代码确实删除了不属于 randomLength 值的单词。但是,它不会将它们全部删除。任何帮助,将不胜感激。

标签: javaarraylist

解决方案


当您从 ArrayList 中删除一个项目时,您将跳过列表中的下一个项目,而不是检查是否应该删除它。

例如,如果您列出的是“apples”、“beer”、“charlie”、“dogs”、“atom”、“elephant”,那么您应该删除的单词长度的随机数是 4(beer, dogs ,并且 atom 应该被删除),“atom”不会被删除。当 for 循环运行时,它运行如下:

i:0,单词:“apples”,未删除

i: 1, word: "beer", 移除

i: 2, word: "dogs", 移除

i:3,单词:“大象”,未删除。

如果删除了一个元素,则必须将 i 减 1,以便检查所有元素。i--你可以通过在后面加上一行来做到这一点dictionaryList.remove(i)

发生这种情况是因为当从 ArrayList 中删除一个元素时,它之后的所有元素都会向下移动以填充空间,这与 Array 不同。

此外,你的 for 循环应该有i<dictionaryList.size()而不是i<dictionaryList.size()-1为了检查最后一个元素。

您也可以使用 Iterator 来遍历您的 ArrayList,但如果您还没有学过它,您可能不想使用它。


推荐阅读