java.lang.IndexOutOfBoundsException bei verschachtelter ArrayList

Hackepeter

Aktives Mitglied
Servus,

habe leider ein Problem mit meiner Anwendung. Ich verwende eine verschachtelte ArrayList, also eine ArrayList in einer ArrayList, weil ich ein zwei-dimensionales Array von einem Objekt benötige.

Ich beschreibe ein Spielfeld quasi wie eine Tabelle. Zunächst fülle ich eine Zeile mit Objekten (das wäre die innere ArrayList:

Java:
temp.add(spielkarte);

Wenn eine Zeile voll ist, schreibe ich die temporäre ArrayList in das Klassenattribut (Hauptarray) des Spielfelds und leere es anschließend:

Java:
if((i + 1) % anzahlSpalten == 0 && i != 0){
	            spielfeld.add(temp);
	            temp.clear();
	        }

Jetzt versuche ich in einer anderen Methode auf die einzelnen Elemente zuzugreifen und erhalte eine IndexOutOfBoundsException: Index: 0, Size: 0:

Java:
for(int i = 0; i < anzahlZeilen; i++)
	    {
	        for(int j = 0; j < anzahlSpalten; j++)
	        {
	            id = spielfeld.get(i).get(j).getId();
	            ...
	        }
	    }

Beim Debuggen habe ich gesehen, dass sämtliche Elemente auf Null stehen. Nun bin ich mir nicht sicher, ob man sowas im Debugger einfach nicht sehen kann, oder ob da was schief gelaufen ist. Hat es vielleicht etwas damit zu tun, dass ich das temporäre Array wieder leere? Eigentlich ja nicht, oder? Die Objekte aus dem temporären Array müssten ja jetzt eigentlich im Hauptarray stecken.

Ich komm leider auch nicht wirklich auf eine Lösung.

Ich hoffe mir kann jemand helfen.

Danke im Voraus!
 

faetzminator

Gesperrter Benutzer
Deine Liste ist leer. Normalerweise schreibt man Iterationen durch Arrays und Listen so:
Java:
for (int i = 0; i < spielfeld.size(); i++) {
    List<Foo> reihe = spielfeld.get(i);
    for (int j = 0; j < reihe.size(); j++) {
        // ...
    }
}
Wenn du aber den Index gar nie benötigst, kannst du auch so durchiterieren:
Java:
for (List<Foo> reihe : spielfeld) {
    for (Foo element : reihe) {
        // ...
    }
}
 

Mujahiddin

Top Contributor
Du hast eine ArrayList in einer ArrayList, und dann hast du einen Typ, der in dieser verschachtelten ArrayList steht.
Wenn du eine ArrayList mit diesem Typ erzeugst und diese ArrayList in die Hauptliste steckst, dann darfst du diese nicht leeren. Schließlich werden nur Referenzen übergegeben und keine ganzen Objekte.
Deine Variable
Code:
temp
und der Index in deiner Hauptliste zeigen also auf das gleiche Objekt. Wenn du jetzt eine der beiden Refernezen verwendest, um das Objekt zu manipulieren, wird das an beiden Enden sichtbar.

Um das vielleicht bisschen verständlicher zu machen:

Java:
List<List<String>> list = new ArrayList<>();
List<String> temp = new ArrayList<>(); // "temp" ist so gesehen keine Liste, sondern nur eine Referenz auf eine Liste. "new ArrayList<>();" erzeugt eine Liste und "temp" zeigt auf diese. Später kann man mit "temp = otherList;" die Referenz ändern, damit bleibt aber die ArrayList der rechten Seite unverändert.
temp.add("Hallo"); // nun wird in die rechte ArrayList, die wir erzeugt hatten, auf die temp zeigt, Sachen eingefügt.
temp.add("Welt");
list.add(temp); // es wird nun eine Referenz übergeben. Index 0 der Liste, auf die "list" zeigt, zeigt nun auf die gleiche Liste, auf die auch "temp" zeigt.

Auf den ersten Blick bisschen verwirrend, aber wenn man sich das öfter anguckt und einige Beispiele schreibt, wird das klarer.
 
Zuletzt bearbeitet:

Hackepeter

Aktives Mitglied
Ah, verstehe. Und gibt es die Möglichkeit, die temporäre Liste als Kopie zu übergeben? Bei C++ musste ich immer angeben, dass ich einen Pointer übergebe.
 

Fant

Bekanntes Mitglied
Deswegen?
[c]temp.clear();[/c]

Du fügst ja sogar immer die gleiche Liste hinzu. Was du vermutlich möchtest kannst du zB so umsetzen:
Java:
if((i + 1) % anzahlSpalten == 0 && i != 0){
                spielfeld.add(new ArrayList(temp));
                temp.clear();
            }


[OT]
...man man, bin ich wieder langsam gewesen :D [/OT]
 

Mujahiddin

Top Contributor
Dazu müsstest du den Code von Fant benutzen...
Aber Vorsicht sei geboten... Ich sehe den Sinn hinter dem Codeschnipsel nämlich nicht. Du kopierst die ganze Liste, um die Liste später zu löschen? Das ist einmal fast O(n) und einmal O(1).
Ich glaube, was du willst, ist eher das:
Java:
spiefeld.add(temp);
temp = new ArrayList<>();
Bewirkt genau das gleiche, ist aber einmal fast O(1) und einmal O(1).
 

Hackepeter

Aktives Mitglied
Was bedeutet dieses O(1)? Ja, genau das habe ich gesucht. Ich werde es mal ausprobieren, aber ich sehe jetzt schon, dass dort der Fehler begraben liegt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
K Fehlermeldung: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 Java Basics - Anfänger-Themen 4
M java.lang.IndexOutOfBoundsException weiß nicht warum Java Basics - Anfänger-Themen 8
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
JaVaN0oB java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 18
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 3
P java.lang.ClassCastException Bedeutung und Lösung Java Basics - Anfänger-Themen 3
J Erste Schritte java.lang.NoClassDefFoundError Java Basics - Anfänger-Themen 4
I java.lang.ArrayIndexOutOfBoundsException at lösung.main Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
T Compiler-Fehler java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 2
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
N jodaTime java.lang.IllegalArgumentException: Invalid format Java Basics - Anfänger-Themen 3
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
F Erste Schritte java.lang.StringIndexOutOfBoundsException Java Basics - Anfänger-Themen 3
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
R java.lang.StringIndexOutOfBoundsException Java Basics - Anfänger-Themen 1
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
V java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
H java.lang.NoClassDefFoundError Run as>> Run on Server Java Basics - Anfänger-Themen 2
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
M java.lang.Enum.valueOf(Unknown Source) Java Basics - Anfänger-Themen 2
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
C Hilfe!!! java.lang.ClassCastException Java Basics - Anfänger-Themen 1
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
W Methoden Rückgabedatentyp java.util.Map<java.lang.String,? extends ...> Java Basics - Anfänger-Themen 4
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
F Exception in thread main java.lang.StackOverflowError Java Basics - Anfänger-Themen 3
K Caused by: java.lang.NoClassDefFoundError: org/mindrot/jbcrypt/BCrypt Java Basics - Anfänger-Themen 0
S java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 4
OnDemand java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 9
A Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 7
J Klassen java.lang.String - lexikographisches Sortieren Java Basics - Anfänger-Themen 5
P Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 3
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
H Classpath java.lang.NoClassDefFoundError externe Libary Java Basics - Anfänger-Themen 4
M Exception in thread "main" java.lang.NoClassDefFoundError: MeineKlasse Java Basics - Anfänger-Themen 12
X Applet Fehler: java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 45
B java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
S Fehler: "java.lang.NullPointerException" Java Basics - Anfänger-Themen 6
V java.lang.NoSuchMethodError Java Basics - Anfänger-Themen 2
J java.lang.math asin() Java Basics - Anfänger-Themen 18
I Erste Schritte Ausführfehler: java.lang.NullPointerException Java Basics - Anfänger-Themen 3
R Compiler-Fehler java.lang.ArrayIndexOutOfBoundsException, warum? Java Basics - Anfänger-Themen 6
K Error: java.lang.NoSuchMethodException Java Basics - Anfänger-Themen 2
M Compiler-Fehler Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 2
G java.lang.ClassNotFoundException Java Basics - Anfänger-Themen 4
1 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException Java Basics - Anfänger-Themen 5
S Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 11
S String index out of range: 8 at java.lang.String.substring(Unknown Source) Java Basics - Anfänger-Themen 13
V [Greenfoot] java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 10
X Interpreter-Fehler "java.lang.NullPionterException: null" bei BlueJ Java Basics - Anfänger-Themen 10
P java.lang.ClassCastException Java Basics - Anfänger-Themen 2
D java.lang.NoSuchMethodError: main Java Basics - Anfänger-Themen 11
S expected java.lang.string but found char Java Basics - Anfänger-Themen 5
S Umgebungsvariable Exception in thread "main" java.lang.UnsatisfiedLinkError: no J3D in java.librar y.path Java Basics - Anfänger-Themen 15
S Compiler-Fehler java.lang.SecurityException: Invalid signature file digest for Manifest main attributes Java Basics - Anfänger-Themen 5
M Klassen Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 2
A Compiler-Fehler unreported exception java.lang.Exception; must be caught or declared to be thrown Java Basics - Anfänger-Themen 7
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
J java.lang.NullPointerException Java Basics - Anfänger-Themen 18
K Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 6
F Ich kenn mich nicht mehr aus - 'java.lang.NoSuchMethodError: main' in Applet? Java Basics - Anfänger-Themen 2
K OOP java.lang.NullPointerException Java Basics - Anfänger-Themen 2
N iText PDF Fehler, java.lang.ClassNotFoundException: com.lowagie.text.Phrase Java Basics - Anfänger-Themen 7
M java.lang.NumberFormatException-Problem Java Basics - Anfänger-Themen 6
H java.lang.NoSuchMethodError: Java Basics - Anfänger-Themen 5
J java.lang.UnsatisfiedLinkError: Java Basics - Anfänger-Themen 9
T List in java.lang.Object... einfügen Java Basics - Anfänger-Themen 12
M java.lang.StringTokenizer Java Basics - Anfänger-Themen 4
I java.lang.String cannot be cast to OBJEKT Java Basics - Anfänger-Themen 8
P java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory Java Basics - Anfänger-Themen 1
Y java.lang.NoSuchMethodError: main Java Basics - Anfänger-Themen 9
B Exception in thread "main" java.lang.NullPointerException Fehler Hilfe! Java Basics - Anfänger-Themen 4
D java.lang.outofmemoryerror java heap space bei Hashtable Java Basics - Anfänger-Themen 3
Spin Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: data must Java Basics - Anfänger-Themen 10
S Fehlermeldung: java.lang.NullPointerException Java Basics - Anfänger-Themen 10
T Fehlermeldung: java.lang.NoClassDefFoundError Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben