if(responseArr.size()!=0) {
for(int i=0;i<responseArr.size();i++) {
if(responseArr.get(i).equals("busy")) {
stylistId.remove(i);
}
}
}
如果数组中的任何值包含字符串 busy ,我想从该位置的 stylistId 数组中删除该值。在上面的代码中, responseArr 数组和 stylistId 数组的大小相同。
当我尝试从 stylistId 中删除值时,第一次执行循环时,它工作正常。当循环第二次执行时,出现 indexOutOfBound 异常。
答案 0 :(得分:1)
之所以发生这种情况,是因为删除元素时列表中某些元素的索引发生了变化。例如,如果您的列表包含五个元素(0、1、2、3、4),并且删除了元素2,则元素3和4将被重新编号,以便之后具有(0、1、2、3)。 / p>
有很多解决此问题的方法,但是一种方法就是简单地向后遍历responseArr
。
for(int i= responseArr.size() - 1;i >= 0; i--){
if(responseArr.get(i).equals("busy")){
stylistId.remove(i);
}
}
这样,您将只更改已检查的元素的索引。
答案 1 :(得分:-1)
因为remove
方法有两个版本。
您需要调用第二个返回元素的方法。因此,您可以使用“赞”
for (int i = 0; i < responseArr.size(); i++) {
if (responseArr.get(i).equals("busy")) {
int id = stylistId.remove(i); //use your type instead of int.
}
}