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异常。
2 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
发生这种情况是因为当您删除一个元素时,列表中某些元素的索引会发生变化。例如,如果您的列表有五个元素 (0, 1, 2, 3, 4) 并且您删除了元素 2,那么元素 3 和 4 将被重新编号,以便之后您拥有 (0, 1, 2, 3) 。
这个问题有很多可能的解决方案,但一种方法是简单地responseArr向后遍历。
for(int i= responseArr.size() - 1;i >= 0; i--){
if(responseArr.get(i).equals("busy")){
stylistId.remove(i);
}
}
这样,您只会更改已检查过的元素的索引。
慕妹3242003
TA贡献1824条经验 获得超6个赞
因为有两个版本的remove
方法。
删除索引处的元素
删除给定元素
您需要调用返回元素的第二个方法。所以,你可以使用 Like,
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.
}
}
添加回答
举报
0/150
提交
取消