对于每个循环错误: - java.lang.IndexOutOfBoundsException:索引8无效,大小为8

时间:2017-01-27 05:25:55

标签: android foreach

对于以下代码,我收到错误

  

致命例外:主要   过程: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());
    }

3 个答案:

答案 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());
    }
}