Elemente einer ArrayList von rechts wegnehmen

Zootlex

Mitglied
Hey Leute,

ich muss für mein Studium ein kleines Spiel erstellen.
Leider habe ich Probleme Elemente von einer ArrayListe von "rechts" wegzunehmen.



//anzahl = Anzahl der Elemente die weggenommen werden sollen.

Code:
			if(seite == 'l') {
				for(int i = 0;i < anzahl;i++) {
					currentMinion = minionsHome.get(i);
					playerMinions.add(currentMinion);
					minionsHome.remove(i);
				}
				showMinions();
				loose();
			}
	
			if(seite == 'r') {
				for(int i=minionsHome.size();i>minionsHome.size()-anzahl;i--) {
					currentMinion = minionsHome.get(i-1);
					playerMinions.add(currentMinion);
					minionsHome.remove(i-1);
				}
				showMinions();
				loose();
			}

Jedes Mal wenn ich also was von rechts wegnehmen will kriege ich folgende Exception:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

Bitte helft mir :<
 
Zuletzt bearbeitet:

Ruzmanz

Top Contributor
Sorry, ist beides falsch. Die for-Schleife führt die "if-Bedingung" übrigens bei jedem Durchlauf neu aus. Da du die Größe deiner Liste immer weiter verkleinerst geht das im Prinzip bis "-anzahl" weiter ...

Java:
public class DeleteTest {
	public static void main(String[] args) {
		List<String> arrayList = new ArrayList<String>(Arrays.asList("A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z".split(";")));
		deleteLeft(4, arrayList);
		deleteRight(4, arrayList);
	}
	
	public static void deleteLeft(int anzahl, List<String> arrayList) {
		for(int i = 0;i < anzahl;i++) {
			String s = arrayList.get(i);
			arrayList.remove(i);
			System.out.println("Lösche: " + s);
		}
		System.out.println("Ende1");
	}
	
	public static void deleteRight(int anzahl, List<String> arrayList) {
		for(int i=arrayList.size();i>arrayList.size()-anzahl;i--) {
			String s = arrayList.get(i-1);
			arrayList.remove(i-1);
			System.out.println("Lösche: " + s);
		}
		System.out.println("Ende2");
	}
}

Ergebnis:

Lösche: A
Lösche: C
Lösche: E
Lösche: G
Ende1
Lösche: Z
Lösche: Y
Lösche: X
Lösche: W
Lösche: V
Lösche: U
Lösche: T
Lösche: S
Lösche: R
Lösche: Q
Lösche: P
Lösche: O
Lösche: N
Lösche: M
Lösche: L
Lösche: K
Lösche: J
Lösche: I
Lösche: H
Lösche: F
Lösche: D
Lösche: B
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:418)
at java.util.ArrayList.get(ArrayList.java:431)
at DeleteTest.deleteRight(DeleteTest.java:24)
at DeleteTest.main(DeleteTest.java:10)
 

Foxei

Bekanntes Mitglied
Hi Mach es doch so :D

Java:
public class DeleteTest {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<String>(Arrays.asList("A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z".split(";")));
        deleteLeft(4, arrayList);
        deleteRight(4, arrayList);
    }
 
    public static void deleteLeft(int anzahl, List<String> arrayList) {
        for(int i = 0;i < anzahl;i++) {
            String s = arrayList.get(i);
            arrayList.remove(i);
            System.out.println("Lösche: " + s);
        }
        System.out.println("Ende1");
    }
 
    public static void deleteRight(int anzahl, List<String> arrayList) {
        for(int i=1;i<=anzahl;i++) {
            String s = arrayList.get(arrayList.size()-i);
            arrayList.remove(arrayList.size()-i);
            System.out.println("Lösche: " + s);
        }
        System.out.println("Ende2");
    }
}

Ausgabe:
Java:
Lösche: A
Lösche: C
Lösche: E
Lösche: G
Ende1
Lösche: Z
Lösche: X
Lösche: V
Lösche: T
Ende2
 

Foxei

Bekanntes Mitglied
Du weist aber das du damit nicht die ersten 4 Elemente Löschst bzw die letzte. !!!!!!!!!
Um die ersten 4 bzw die letzten 4 zu löschen muss es so aussehen:
Java:
public class DeleteTest {
	public static void main(String[] args) {
		List<String> arrayList = new ArrayList<String>(Arrays.asList("A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z".split(";")));
		deleteLeft(4, arrayList);
		deleteRight(4, arrayList);
	}
 
	public static void deleteLeft(int anzahl, List<String> arrayList) {
		for(int i = 0;i < anzahl;i++) {
			String s = arrayList.get(0);
			arrayList.remove(0);
			System.out.println("Lösche: " + s);
		}
		System.out.println("Ende1");
	}
 
	public static void deleteRight(int anzahl, List<String> arrayList) {
		for(int i=0;i<anzahl;i++) {
			String s = arrayList.get(arrayList.size()-1);
			arrayList.remove(arrayList.size()-1);
			System.out.println("Lösche: " + s);
		}
		System.out.println("Ende2");
	}
}
Ausgabe:
Java:
Lösche: A
Lösche: B
Lösche: C
Lösche: D
Ende1
Lösche: Z
Lösche: Y
Lösche: X
Lösche: W
Ende2
 
Zuletzt bearbeitet:

Ruzmanz

Top Contributor
Du weist aber das du damit nicht die ersten 4 Elemente Löschst bzw die letzte. !!!!!!!!!

War das an mich gerichtet? Bei so "einfachen" Sachen bringt es nichts die Lösung zu posten. Die Leute müssen lernen ihre Probleme selbst zu lösen. Ich habe lediglich seinen Quelltext vereinfacht und genau so implementiert wie der TE. Anhand meiner Vorarbeit sollte man erkennen wo die Ausgabe nicht mit dem Erwartungswert übereinstimmt ...
 

Foxei

Bekanntes Mitglied
Okay Sorry :D
Also wir nehmen jetzt mal so wie Ruzmanz deinen Code verändert hat an du hättest eine Array mit allen 26 Buchstaben des Alphabetes. Und wir möchten nun die die ersten vier und die letzten vier Buchstaben Löschen also A B C D und Z Y X W.

Java:
public static void deleteLeft(int anzahl, List<String> arrayList) {
		for(int i = 0;i < anzahl;i++) {
			String s = arrayList.get(i);
			arrayList.remove(i);
			System.out.println("Lösche: " + s);
		}
		System.out.println("Ende1");
	}

Ausgabe:
Java:
Lösche: A
Lösche: C
Lösche: E
Lösche: G
Wie hier Auffallen sollte sind das nicht die ersten vier Buchstaben des Alphabets. :(
Warum das denn nicht? Das ist ziemlich Simpel du beim ersten Durchlauf ist i=0 Damit nimmst du den ersten Buchstaben weg nämlich A. beim zweiten Durchlauf ist i=1 damit nimmst du den zweiten Buchstaben des ohnehin schon kleiner gewordenen Arrays weg :/ also ein C. Das summiert sich dann und führt dazu das du nicht die ersten vier weg nimmst.
Also musst du immer den ersten weg nehmen sprich anstatt i einzusetzen muss da immer 0 rein. Denn wenn du den Nullten Buchstaben weg nimmst also das A wird der Neue Nullte Buchstabe ja automatisch ein B. usw.

Java:
public static void deleteLeft(int anzahl, List<String> arrayList) {
		for(int i = 0;i < anzahl;i++) {
			String s = arrayList.get(0);
			arrayList.remove(0);
			System.out.println("Lösche: " + s);
		}
		System.out.println("Ende1");
	}

Ausgabe:
Java:
Lösche: A
Lösche: B
Lösche: C
Lösche: D

Nun zu den letzten Vier:
Java:
public static void deleteRight(int anzahl, List<String> arrayList) {
		for(int i=arrayList.size();i>arrayList.size()-anzahl;i--) {
			String s = arrayList.get(i-1);
			arrayList.remove(i-1);
			System.out.println("Lösche: " + s);
		}
		System.out.println("Ende2");
	}
Ausgabe:
Java:
Lösche: Z
Lösche: Y
Lösche: X
Lösche: W
Lösche: V
Lösche: U
Lösche: T
Lösche: S
Lösche: R
Lösche: Q
Lösche: P
Lösche: O
Lösche: N
Lösche: M
Lösche: L
Lösche: K
Lösche: J
Lösche: I
Lösche: H
Lösche: F
Lösche: D
Lösche: B
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:418)
at java.util.ArrayList.get(ArrayList.java:431)
at DeleteTest.deleteRight(DeleteTest.java:24)
at DeleteTest.main(DeleteTest.java:10)

Also "i>arrayList.size()-anzahl" Müsste je eigentlich funktionieren wenn du nicht in der schleife die zahl die für arrayList.size() gegeben ist nicht immer dynamisch um eins kleiner machen würdest :( diese Schleife hat somit ein kein Ende.

Also neu Gedacht wie oben wissen wir ja das wir durch anzahl eine zahl haben nach der wir uns richten können da diese fest ist und in der Schleife nicht verändert wird. Also machen wir uns auch hier eine Schleife wie oben.
Java:
for(int i = 0;i < anzahl;i++) {
			
		}
Nun ent spricht die Ausgabe hier auch nicht den letzten vier :( wir wollen ja immer den letzten wer aus der List Löschen. Mit arrayList.size(); bekommen wir die momentane länge der list da die liste aber mit dem Wert 0 beginnt müssen wir hier noch eins abziehen und haben unser Ergebniss.
Java:
public static void deleteRight(int anzahl, List<String> arrayList) {
		for(int i=0;i<anzahl;i++) {
			String s = arrayList.get(arrayList.size()-1);
			arrayList.remove(arrayList.size()-1);
			System.out.println("Lösche: " + s);
		}
		System.out.println("Ende2");
	}

Noch Fragen? :D :D
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
E Reihenfolge der Elemente einer ArrayList? Allgemeine Java-Themen 4
J Elemente zu einer List hinzufügen? Allgemeine Java-Themen 9
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
Z Elemente einer HashTabelle gezielt ansprechen Allgemeine Java-Themen 10
S Einzelne Elemente in einer Bild Datei Allgemeine Java-Themen 5
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
JavaJüngling beliebige Collection die Comperable Elemente enthält als Parameter Allgemeine Java-Themen 37
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
J In einem Set doppelte Elemente erzeugen Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
K Neue Elemente in JList einfügen Allgemeine Java-Themen 2
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
S GUI - Drag & Drop Elemente Allgemeine Java-Themen 10
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
M Elemente aus ArrayList, die in ArrayList ist Allgemeine Java-Themen 2
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
C Auf Oberflaechen Elemente zugreifen Allgemeine Java-Themen 8
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
Iron Monkey Array-Elemente Allgemeine Java-Themen 9
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
R Elemente eines Vectors [Java 1.4] Allgemeine Java-Themen 5
B Liste auf gleiche Elemente untersuchen? Allgemeine Java-Themen 2
C Auf ArrayList Elemente referenzieren? Allgemeine Java-Themen 17
M Progblem bei Zugriff auf Array Elemente Allgemeine Java-Themen 4
der JoJo [TreeSelection] wie bekomme ich alle Elemente Allgemeine Java-Themen 4
G Alle Möglichkeiten n Elemente Anzuordnen. Allgemeine Java-Themen 13
M Elemente aus Liste entfernen? Allgemeine Java-Themen 7
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
J Netbeans: wie auf grafische elemente zugreifen, andere Datei Allgemeine Java-Themen 2
B Nach Deserialisieren: Elemente des JFrames ohne Funktion Allgemeine Java-Themen 5
G Umkehrung der Array Elemente Allgemeine Java-Themen 2
K Elemente im ArrayList vergleichen Allgemeine Java-Themen 9
F Elemente überdecken sich! Allgemeine Java-Themen 13
G anzahl "verwendeter" elemente eines arrays ermitte Allgemeine Java-Themen 2
S alle elemente aus hashmap lesen Allgemeine Java-Themen 8
T Elemente eines Arrays mischen Allgemeine Java-Themen 5
C Collection, LinkedList, Elemente Allgemeine Java-Themen 4
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
D Abbruch einer ViewScoped Bean in Arbeit Allgemeine Java-Themen 2
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
Lukas2904 Wie kann man cps (ClicksPerSecond) in einer GUI anzeigen lassen? Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
J Zerlegen einer Zahl Allgemeine Java-Themen 6
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben