对于以下代码,我收到错误
致命例外:主要 过程:com.bss.client.righterapplication,PID:20516
java.lang.IndexOutOfBoundsException:索引8无效,大小为8
我需要删除"无"来自List。
private void createNameList(){
arrayListTagNames.clear();
int i=0;
ArrayList<Integer> remArray=new ArrayList<>();
for (TagClass name : arrayListTags){
if (!name.getName().equals("None"))
arrayListTagNames.add(name.getName());
else
remArray.add(i);
i++;
}
Log.d("arrays0", arrayListTags.toString());
Log.d("arrays0", String.valueOf(arrayListTags.size()));
Log.d("arrays1", arrayListTagNames.toString());
Log.d("arrays2", remArray.toString());
Log.d("arraySize1 ", String.valueOf(arrayListTagNames.size()));
Log.d("arraySize2 ", String.valueOf(remArray.size()));
//arrayListTags.removeAll(remArray);
// arrayListTags.removeAll(remArray);
for (int index : remArray){
arrayListTags.remove(index);
Log.d("indexarraylist", arrayListTags.toString());
}
Log.d("array ALT ", arrayListTags.toString());
}
答案 0 :(得分:1)
假设arrayListTags大小为5且&#34;无&#34;在索引3和索引5 现在你删除了索引3,所以你的arrayListTags大小是4,你的索引5现在是索引4,你正试图删除索引5处的值并给出索引。 试试
// Get an iterator.
Iterator<TagClass> ite = arrayListTags.iterator();
while (ite.hasNext()) {
TagClass value = ite.next();
if (value.getName().equalsIgnoreCase("None"))
ite.remove();
}
}
arrayListTags将被修改,并将具有排除where的值 名称为无。
答案 1 :(得分:0)
你应该使用普通的for循环而不是每个。
将每个替换为。
for (int i = 0 : i < arrayListTags.size() : i++)
{
if (!name.getName().equals("None"))
arrayListTagNames.add(name.getName());
else
remArray.add(i);
}
答案 2 :(得分:0)
问题在于你的arrayListTags.remove(index);
代码,因为在这里你没有检查arraylistTags的大小,它不大于或等于删除索引位置,所以它给出数组 IndexOutOfBoundEception 。请查看此代码:
private void createNameList() {
if(arrayListTagNames==null){
arrayListTagNames = new ArrayList<>();
}
arrayListTagNames.clear();
int i = 0;
ArrayList<Integer> remArray = new ArrayList<>();
for (TagClass name : arrayListTags) {
if (!name.getName().equals("None")) {
arrayListTagNames.add(name.getName());
} else {
remArray.add(i);
}
i++;
}
if (arrayListTags != null && arrayListTags.size() > 0) {
Log.d("arrays0", arrayListTags.toString());
Log.d("arrays0", String.valueOf(arrayListTags.size()));
}
if (arrayListTagNames != null && arrayListTagNames.size() > 0) {
Log.d("arrays1", arrayListTagNames.toString());
Log.d("arraySize1 ", String.valueOf(arrayListTagNames.size()));
}
if (remArray != null && remArray.size() > 0) {
Log.d("arrays2", remArray.toString());
Log.d("arraySize2 ", String.valueOf(remArray.size()));
}
for (int index : remArray) {
//Remove index if that is available for arrayListTag list
if(index<arrayListTags.size()) {
arrayListTags.remove(index);
}
if (arrayListTags != null && arrayListTags.size() > 0) {
Log.d("indexarraylist", arrayListTags.toString());
}
}
if (arrayListTags != null && arrayListTags.size() > 0) {
Log.d("array ALT ", arrayListTags.toString());
}
}