java - 删除 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 值的单词。但是,它不会将它们全部删除。任何帮助,将不胜感激。
解决方案
当您从 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,但如果您还没有学过它,您可能不想使用它。
推荐阅读
- r - 根据包含在闪亮仪表板中的对象调整框高度
- javascript - React Native Animated - onScroll 性能问题
- jenkins - 如何通过 api 或 cli 从 jenkins 服务器获取建议的 jenkins 插件列表?
- javascript - 未捕获的 ReferenceError:无法在 html 表单中调用 ajax 函数
- tensorflow - keras stack LSTM:当输入在时间步长上移动时,为什么中间层输出没有移动?
- javascript - 功能 this.click 不适用于 casperjs
- javascript - Javascript:如何为对象数组中的对象属性设置值?
- php - MySQL 升级导致简单 WHERE 子句出现意外结果
- javascript - 替换Node JS中的文件路径
- python-3.x - 减少对'_thread.lock'对象的{方法'acquire'}python的调用次数