1

My-CodeIndexOutOfBoundException für Arraylist

public List<GeoPoint> compute_polygon(List<GeoPoint> waypoints, double d) 
     { 
      int N = waypoints.size();//25 
      int T = 2 * N - 1;//49 
//   GeoPoint[] reduced_waypoints = waypoints.toArray(new GeoPoint[waypoints.size()]); 
      List<GeoPoint> polygon = new ArrayList<GeoPoint>(T); 
      for (int i = 1; i < N - 1; i++) 
      { 

       GeoPoint M = get_disp(waypoints.get(i - 1), waypoints.get(i), waypoints.get(i + 1), d); 
       polygon.add(i, v_add(waypoints.get(i), M));// here it fails and throws exception. 
       polygon.add(T-i, v_sub(waypoints.get(i), M)); 
      } 
} 

Fehlerausgabe

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 
    at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
    at java.util.ArrayList.set(ArrayList.java:444) 
    at de.carbook.vendor.search.PathPolygon.compute_polygon(PathPolygon.java:40) 
    at de.carbook.vendor.search.Cleansing_the_waypoints.main(Cleansing_the_waypoints.java:41) 

Ich bin nicht in der Lage, um herauszufinden, was das Problem verursacht.

der Fehler ist bei polygon.add(i, v_add(waypoints.get(i), M)); Hier schlägt es fehl und wirft Ausnahme.

versuchte ich polygon.add(index,element) und polygon.set(index,element) es nicht auf beiden Fällen

Während Debuggen ich diese Zeile gefunden List<GeoPoint> polygon = new ArrayList<GeoPoint>(T); initiallized ist (leer) auf null. Ist es ein Problem?

aktualisieren 1

public List<GeoPoint> compute_polygon(List<GeoPoint> points, double d) 
     { 
      int N = points.size();//25 
      int T = 2 * N - 1;//49 
      GeoPoint[] waypoints = points.toArray(new GeoPoint[N]); 
      GeoPoint[] polygon = new GeoPoint[T]; 
      for (int i = 1; i < N - 1; i++) 
      { 
       GeoPoint M = get_disp(waypoints[i - 1], waypoints[i], waypoints[i + 1], d); 
       polygon[i]  = v_add(waypoints[i], M); 
       polygon[T - i] = v_sub(waypoints[i], M); 
      } 
      GeoPoint A = v_mul(v_nor(v_prp(v_sub(waypoints[1], waypoints[0]))), d); 
      GeoPoint B = v_mul(v_nor(v_prp(v_sub(waypoints[N-1], waypoints[N-2]))), d); 
      polygon[0] = v_add(waypoints[0], A); polygon[T] = v_sub(waypoints[0], A); 
      polygon[N - 1] = v_add(waypoints[N-1], B); polygon[N] = v_sub(waypoints[N-1], B); 

      List<GeoPoint> poly = new ArrayList<GeoPoint>(Arrays.asList(polygon)); 
      System.out.println(poly); 

      return poly; 
     } 

Fehler bei Update

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 49 
    at de.carbook.vendor.search.PathPolygon.compute_polygon(PathPolygon.java:67) 
    at de.carbook.vendor.search.Cleansing_the_waypoints.main(Cleansing_the_waypoints.java:41) 
+0

Verwenden Sie 'polygon.add (v_add (waypoints.get (i), M))' anstelle von 'polygon.add (i, v_add (waypoints.get (i), M))' – Jens

+0

@Jens, aber ich brauche dieser Index, um Punkte in einer Reihenfolge zu platzieren. –

+0

Aber Sie fügen es in der gleichen Reihenfolge mit beiden Anweisungen hinzu. – Jens

Antwort

0

Es ist, weil Sie an einem bestimmten Index einzufügen versuchen, während sie noch nicht existiert. List<GeoPoint> polygon = new ArrayList<GeoPoint>(T); sagt nur, dass es so viel Speicherplatz in Anspruch nehmen sollte. Wenn Sie die Kapazität nicht angeben, muss das interne Array wiederholt neu zugewiesen werden, wenn die Liste wächst.

verwenden:

polygon.add(v_add(waypoints.get(i), M)) 
+0

Wie korrigiere ich es? –

+1

@ShreyasRaoB Sie kennen die Größe im Voraus und möchten sie in bestimmte Indizes einfügen. Also benutze ein Array. Aber beachten Sie, dass der Index 0 = null bleibt, da Sie mit i = 1 beginnen. – Fildor

+0

@Fildor verwendet Array, aber immer noch Problem besteht .. –

0

Sie sollten nicht Index Einfügen auf dem neuen Arraylist verwenden. Intern verwendet ArrayList ein Array, das basierend auf seiner Länge dynamisch wächst. Verwenden Sie stattdessen add (Object).