"ArrayIndexOutofBoundsException: 2" Array Problem

Sumo_ow

Mitglied
Hier ist mein Problem (hilfe!):
In einer Methode will ich jeden Spieler der online ist zu einem bestimmten Block teleportieren.
Angenommen es gibt 4 Spieler, darunter ein Spieler (Ich) welcher auf einen besonderen Block kommt. In einer Schleife werden zuerst alle Spieler der Collection
Java:
Bukkit.getOnlinePlayers()
in ein Array gegeben. In der nächsten Schleife ist der Iterator j auch gleichzeitig die "Sitznummer" oder die Nummer der "Location/Position" auf die der Spieler teleportiert werden soll. z.B. j = 3 und Sitzplatz 3. Wenn der Spieler jedoch "Sumo_ow" (in dem Fall) heißt, kommt er auf einen Sitzt welcher nicht im Array der Locations/Positionen ist, sondern auf einen anderen speziellen. Wenn also j = 0 -> Platz 0.
j = 1 -> Platz 1, in einem Fall würde dann z.b. "Sumo_ow" im Array sein und dementsprechend ist der boolean "xFound" auf true gesetzt worden. Wenn dann also j = 2 -> "Sumo_ow" -> "customLocation" und danach würde j = 3 keinen Platz bekommen, weil es nur 3 Plätze inkl. einen besonderen für "Sumo" gibt. [Platz 0, Platz 1, Platz 2] und "customLocation", dafür die Abfrage ob "xFound" true ist.

In der Konsole kommt der Fehler: "java.lang.ArrayIndexOutOfBoundsException: 2"
Und im Mc-Chat steht: "An internal error occured while attempting to perform this command"

Code:

Java:
        Location locationArray[] = new Location[players];
        locationArray[0] = new Location(world, 2.5, 150.0, 2.5);
        locationArray[1] = new Location(world, -1.5, 150.0, 0.5);
        locationArray[2] = new Location(world, 0.5, 150.0, -1.5);
        
        Location customLoc = new Location(world, 0.5, 150.0, 0.5); //<-- Sumo_ow
        
        Player playerArray[] = new Player[players];
        for (int i = 0; i <= players; i++) {

            playerArray[i] = Iterables.get(Bukkit.getOnlinePlayers(), i);           
        }
        
        for(int j = 0; j <= players; j++) {
            
            if(playerArray[j].getName() == "Sumo_ow") {
                playerArray[j].teleport(customLoc);
                xFound = true;
                
            } else {
                if(xFound) {
                    playerArray[j].teleport(locationArray[j-1]);
                } else {
                    playerArray[j].teleport(locationArray[j]);
                }
                
                
            }
            
            
        }

Ich hab schon versucht, Werte ausgeben zu lassen. Länge von "playerArray" entspricht der Anzahl der online Spieler und enthält sie.
"locationArray"'s Länge auch.
Die Umformung von der Collection zu dem Array funktioniert auch. Ich habe erstmal 3 [0, 1, 2] Locations testweise eingetragen für ein Maximum von 4 Spielern.
Java:
for (int i = 0; i <= players; i++) {

            playerArray[i] = Iterables.get(Bukkit.getOnlinePlayers(), i);           
        }
 
Typischer "off-by-one Error":
Java:
for (int i = 0; i <= players; i++) {
->
Java:
for (int i = 0; i < players; i++) {
Der Schleifenzähler darf ja nicht = players sein, da Arrays mit 0 anfangen.
 
Bitte überprüfe auch _alle_ Schleifen in deinem Code. Nicht nur die eine mit dem `i` als Zähler. Du hast da auch noch mehr falsche, z.B. die mit dem `j` als Zähler.
Desweiteren hast du auch noch mehr Fehler in deinem Code.
Zum Beispiel greifst du ja auch per `locationArray[j-1]` auf das Array zu. Was aber, wenn `j=0` ist im ersten Schleifendurchlauf?
 
Bitte überprüfe auch _alle_ Schleifen in deinem Code. Nicht nur die eine mit dem `i` als Zähler. Du hast da auch noch mehr falsche, z.B. die mit dem `j` als Zähler.
Desweiteren hast du auch noch mehr Fehler in deinem Code.
Zum Beispiel greifst du ja auch per `locationArray[j-1]` auf das Array zu. Was aber, wenn `j=0` ist im ersten Schleifendurchlauf?
Ich habe auch bei der 2. Schleife korriegiert. Nur wenn der Spieler "Sumo_ow" bereits in der Liste enthalten war, dann kriegt der nächste Spieler den Sitz -1. Bei zwei Spielern in meinem Fall dann: j=0 -> "Sumo_ow". j=1 -> Platz 1-1 = Platz 0, da es nur einen Platz gibt [0] und Platz 1 da nicht existieren würde, wenn es nur 2 Spieler gibt.
 

Zurück
Oben