Warum kriege ich den Error "Array index is out of bounds" und wie löse ich ihn?

3 Antworten

Schreibe eine Zeile drüber folgendes:

if (args.length < 2) return false;

Natürlich kannst du zusätzlich noch per Player#sendMessage() eine Fehlermeldung an den Spieler ausgeben. Zum Beispiel wie man den Command richtig benutzen würde.

Der Fehler "Array Index is out of bounds" kommt daher, dass du auf args[1] zugreifst, aber nicht garantiert ist, dass dort auch wirklich was ist. Wenn der User hinter seinem Command also nur ein oder garkein Argument eingibt, und du auf das zweite zugreifst, dann kommt halt ein Error.

Woher ich das weiß:eigene Erfahrung – Minecraft-Experte. Aktiver Spieler seit 2011.
MrArthur 
Fragesteller
 13.11.2021, 17:34

Ich habe allerdings geprüft ob es 0, 1 argumente gibt

if(args.length == 1) {
Player target = Bukkit.getPlayer(args[1]);
0
MrAmazing2  13.11.2021, 17:34
@MrArthur

Arrays starten bei Index 0.

Wenn es ein Element im Array gibt, also args.length == 1 ist, dann ist dieses Element bei args[0]. Und dann ist auch garantiert, dass bei args[1] nichts ist, bzw. dass der Zugriff darauf einen Fehler werfen wird.

1
MrAmazing2  13.11.2021, 17:38
@MrArthur
if(args.length == 1) {
    Player target = Bukkit.getPlayer(args[0]);

So musst du's wenndann machen.

1

Falls mit args ein Array der Commandline Argumente gemeint ist, dann bedeutet es, dass args[1] nicht definiert ist. Das erste Commandline Argument wäre args[0].

Weil auch args[0] nicht definiert sein kann, musst Du eigentlich mit args.length prüfen, ob es die gedachte Anzahl an Elementen im Array gibt. Falls nicht, musst Du für getPlayer ein Default-Argument einsetzen.

tja dann hast du kein args[1]

den dann müsste das aufgerufen werden mit zwei parametern , den ich denke parameter1 ist args[0]

MrArthur 
Fragesteller
 13.11.2021, 17:29

ich habe in dieser Methode einen Command der 2 parameter besitzt erstellt (/invsee [name]

0
MrAmazing2  13.11.2021, 17:33
@MrArthur

Das ist nur ein Parameter.

"invsee" ist der Command selbst, und [name] ist der einzige Parameter.

1