首页 > 解决方案 > 添加元素时ArrayList抛出outOfIndex

问题描述

添加像 ar1.add(0) 这样的原始元素是可以的,不会抛出错误,但是当尝试添加 ar1.add(s) 时会抛出错误
**错误不在 ar 数组中,错误在 ar1 数组中,该数组中有实例方法 **

有什么解决方法吗?
`

package graph;

import java.util.*;

public class PrintAllPathUsingDfs {
    static ArrayList<Integer> arr[];

    public static void main(String[] args) {
      Scanner s = new Scanner(System.in);
//      int V =s.nextInt();
//      int E =s.nextInt();
        arr = new ArrayList[4];
      //arrays cant be generic in java
      for(int i =0 ; i< 4;i++)
      {
          arr[i]=new ArrayList<Integer>();
      }
      arr[0].add(1); 
      arr[0].add(2); 
      arr[0].add(3); 
      arr[2].add(0); 
      arr[2].add(1); 
      arr[1].add(3); 
     int src = 2;
     int d =3;
      ArrayList<Integer> ar=new ArrayList<Integer>();
     printAllPaths(src, d,ar);
 }
    static void printpath(ArrayList<Integer> ar)
    {
        for(int i = 0; i<ar.size();i++)
        {
            System.out.print(ar.get(i)+" ");
        }
        System.out.println();
    }
    static  void printAllPaths(int s , int d,ArrayList<Integer> ar)
    {
       Iterator<Integer> it = arr[s].listIterator();
       ArrayList<Integer> ar1=new ArrayList<>();

//       for(int i=0;i<ar.size();i++)
//       {
//         ar1.add(ar.get(i));
//       }
       ar1.add(0);// this adds works
       ar1.add(s);// but this is not working throw error 
      if(d==ar.get(ar.size()-1))
      {
          printpath(ar);
      }
        while(it.hasNext())
        {
            printAllPaths(it.next(),d,ar);
        }
    }
}

`

标签: javaarraylist

解决方案


错误可能发生在ar.get(ar.size()-1)

ar在尝试获取元素之前检查大小。

如果大小为0outOfIndex则将发生。

if(!ar.isEmpty() && d == ar.get(ar.size()-1)) {
  printpath(ar);
}

isEmpty检查是否ArrayList为空意味着size0与否。

为避免out of bound异常,添加了!(not)Empty检查


推荐阅读