我创建了一个方法 Arraylist
字符串和整数的组合。它将删除所有长度小于给定整数的字符串。
例如:
arraylist=[“de”,“aabb”,“aaabbb”,“”,“ab”]
整数=4
所以新的 Arraylist
应该是:[“de”,“aabb”,“aaabbb”]
但我得到了一个错误信息:
线程“main”java.lang.indexoutofboundsexception中出现异常:索引3超出长度3的界限
这是我的密码:
public static void main(String[] args){
ArrayList<String> newArrayList = new ArrayList<>();
newArrayList.add("string1");
newArrayList.add("string2");
newArrayList.add("rem");
newArrayList.add("dontremove");
removeElement(newArrayList, 4); // new arraylist must be = [string1, string2, dontremove]
}
public static void removeElement(ArrayList<String> arraylist, int inputLen){
int arrayLen = arraylist.size();
for(int i=0; i<arrayLen; i++){
if(arraylist.get(i).length() < inputLen){
arraylist.remove(i);
i--;
}
}
System.out.println("New Arraylist: " + arraylist);
}
这个代码怎么了?
4条答案
按热度按时间qybjjes11#
您正在从0循环到数组大小4。在循环中,您正在删除项,因此数组的大小小于4,因此会出现此异常。尝试这样循环:
7fhtutme2#
您正在修改列表,同时对其索引进行迭代。删除第一项后,列表将比预期的要短,一旦到达原始最后一个元素的索引,就会出现此错误。幸运的是
removeIf
方法可以为您做举重:f0ofjuux3#
删除元素时,数组的长度应该更改。这个
arrayLen
变量存储数组的长度,但当数组的长度收缩时不会更改。要改变它,你应该能够仅仅替换arrayLen
与arrayList.size()
,将在删除元素时更改ej83mcc04#
问题是索引的值是4。
但是一旦你从列表中删除一个条目,你现在只有3个条目。
因此,在您的循环中,当您尝试访问第4个条目时,您现在将得到一个
IndexOutOfBounds
错误。解决方案是从arraylist的末尾开始,然后倒计时到0。
在循环中,你不需要: