【问题标题】:For Each loop Error :- java.lang.IndexOutOfBoundsException: Invalid index 8, size is 8 [closed]对于每个循环错误:- java.lang.IndexOutOfBoundsException:索引 8 无效,大小为 8 [关闭]
【发布时间】:2017-01-27 05:25:55
【问题描述】:

对于下面的代码,我收到错误

致命异常:主要
进程:com.bss.client.righterapplication,PID:20516
java.lang.IndexOutOfBoundsException:索引 8 无效,大小为 8

我需要从列表中删除“无”。

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

【问题讨论】:

  • arrayListTags?是吗?

标签: android foreach


【解决方案1】:

假设 arrayListTags 大小为 5,“none”位于索引 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 的值 名称为无。

【讨论】:

    【解决方案2】:

    您应该使用普通的 for 循环而不是 for each。

    将你的 for each 替换为 for。

    for (int i = 0 : i < arrayListTags.size() : i++)
    {
        if (!name.getName().equals("None"))
            arrayListTagNames.add(name.getName());
    
        else
            remArray.add(i);
    }
    

    【讨论】:

      【解决方案3】:

      问题在于您的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());
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多