Java ArrayList BUG?
Ich habe eine Klasse "AndererTest", "xyPosition" und eine Klasse "Testerklasse".In der Klasse "AndererTest" wird eine ArrayList namens "abzufragendeKoordinaten" erstellt und außerdem auch ein mehrdimensionales Array "stringarray", welches Strings speichert. Ich möchte die Inhalte des "stringarray" ausgeben, aber in zufälliger Reihenfolge. Voher habe ich in der Klasse "TesterKlasse" - welche quasi hier die Main - Klasse mit der main methode sein soll - strings dem "stringarray" zugeordnet:
Klasse TesterKlasse:
Ausgegeben soll das "stringarray" mit der Methode arrayDurchlaufen(). Ausgegeben wird aber immer nur:
anstatt z.B.:
stringarray[2] [0] = f;
stringarray[1] [1] = "d";
stringarray[0] [2] = "b";
stringarray[2] [2] = "h";
//...
Hier ist der Code zur kritischen Klasse "AndererTest":
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
public class AndererTest {
static Random random = new Random();
static xyPosition nullnull = new xyPosition(0,0);
static xyPosition nulleins = new xyPosition(0,1);
static xyPosition nullzwei = new xyPosition(0,2);
static xyPosition einsnull = new xyPosition(1,0);
static xyPosition einseins = new xyPosition(1, 1);
static xyPosition einszwei = new xyPosition(1, 2);
static xyPosition zweinull = new xyPosition(2, 0);
static xyPosition zweieins = new xyPosition(2, 1);
static xyPosition zweizwei = new xyPosition(2, 2);
static ArrayList<xyPosition> abzufragendeKoordinaten = new ArrayList<>(Arrays.asList( nullnull, nulleins, nullzwei, einsnull, einseins, einszwei, zweinull, zweieins, zweizwei));
static String[] [] stringarray = new String[3] [3];
static int zufälligeMöglicheyPosition;
static int zufälligeMöglichexPosition;
public int getZufälligeMöglicheyPosition() {
return zufälligeMöglicheyPosition;
}
public int getZufälligeMöglichexPosition() {
return zufälligeMöglichexPosition;
}
public static void durchlaufeArray() {
for (int i = 0; i < 9; i++) {
int grenzeminuseins = abzufragendeKoordinaten.size() - 1;
int zufälligerindex = random.nextInt(abzufragendeKoordinaten.size() - 1) + 0;
zufälligeMöglicheyPosition = abzufragendeKoordinaten.get(zufälligerindex).gety();
zufälligeMöglichexPosition = abzufragendeKoordinaten.get(zufälligerindex).getx();
abzufragendeKoordinaten.remove(zufälligerindex);
System.out.println("stringarray[" + zufälligeMöglicheyPosition + "] [" + zufälligeMöglichexPosition + "] = " + stringarray[zufälligeMöglicheyPosition] [zufälligeMöglichexPosition]);
}
}
}
Der Code zur Klasse xyPosition ist einfach und hier liegt der Fehler bestimmt nicht drin:
public class xyPosition {
static int x;
static int y;
public static Object xyPosition;
public xyPosition(int pX, int pY) {
x = pX;
y = pY;
}
public int getx() { return x; }
public int gety() { return y; }
}
Bilder habe ich hier nur wegen der "nicht mehr genug Zeichen" - Funktion verw.
Biite helft mir, ich sitze schon seit 2 Tagen vor diesem Bug🤬
1 Antwort
Du entfernst in der Schleife immer wieder Einträge von der Liste. Irgendwann hat diese nur noch die Länge von 1, was bedeutet, dass hier:
random.nextInt(abzufragendeKoordinaten.size() - 1) + 0;
eine Zufallszahl zwischen 0 und 0 erzeugt werden soll. Das ist natürlich nicht möglich.
Beim Überfliegen deines Codes ist mir noch aufgefallen, dass du:
- übliche Konventionen missachtest (Klassennamen sollten stets mit einem Großbuchstaben beginnen, zusammengesetzte Begriffe in camelCase-Stil geschrieben werden - Beispiel: getX)
- die Felder der Koordinaten als statisch definiert hast. Das bedeutet, alle Instanzen der Klasse xyPosition haben stets die gleichen Koordinatenwerte.
Lass das static-Schlüsselwort generell weg und erstell dir stattdessen Objekte von deinen Klassen. Klassengebundene Elemente werden nicht so oft gebraucht.
weil es eine schnelle antwort gewesen ist und u.a weil es die vielleicht einzige antwort bleibt
An alle anderen Nutzer/Antworter: Ein hilfreich und danke gibts natürlich trotzdem
final🙃😉