Java, Index 1 out of bounds for length 1?


01.08.2020, 08:12

Fehlermeldung

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
	at Main.startPrompt(Main.java:140)
	at Main.main(Main.java:115)

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Klassischer Fehler, wenn du Zuwenige Argumente eingibst oder bullshit eintippst, bevor du also ein Element lesen willst, erstmal schauen ob der array überhaupt solange ist, und das an der Stelle an der du lesen willst, überhaupt ein Element steht!

Obacht:

Wenn der Array 1 Element hat, hat er die Länge 1, wenn du dieses Element dann lesen willst, sagst du nicht deinarray[1] sondern deinarray[0], weil bei Null angefangen wird zu zählen.

Und vor dem Split würde ich erst schauen ob es sich überhaupt lohnt, bzw. nicht das der leer ist oder so, dann kannst du gleich aufhören an der Stelle <- Würde den Haufen noch etwas effizienter machen, lol


Simon221585  01.08.2020, 08:33

Bei der ersten Abfrage mit dem hey kommt noch

inputSplitted.length >= 1 && rein

Bei deiner Version

inputSplitted.length == 2 &&

Bei ,,hey" musst du nach größer gleich 1 fragen, weil du noch nachfolgende Argumente haben kannst, aber 1 muss es mindestens lang sein.

ColinOW 
Beitragsersteller
 01.08.2020, 08:44
@Simon221585

Danke, hat mir sehr geholfen.

Aber noch 1 Frage, wo ist der unterschied zwischen >= oder <= und < oder >

(Bin anfänger (:)

ColinOW 
Beitragsersteller
 01.08.2020, 09:14
@Simon221585

Sorry, das ich nochmal frage, wenn ich jetzt was eingeben kommt nichts.

Es soll so sein, wenn ich 'hey ver' eingebe, soll ein Text ausgeben werden. Es passiert aber nichts.

if(inputSplittet.length >= 1 && inputSplittet[0].toUpperCase().equals("hey")) {
	System.out.println("hey eingeben");
if(inputSplittet.length == 2 && inputSplittet[1].toUpperCase().equals("ver")) {
				
				System.out.println("[hey version 1]");
				startPrompt();
				
			}

ist doch alles Richtig, oder? ^^

Simon221585  01.08.2020, 09:18
@ColinOW

So sollte es klappen.

Also das ist nur ein Ausschnitt aus deinem Code, hoffentlich nicht der ganze, sonst würde unten noch eine Klammer fehlen.

x < y

x ist kleiner als y

x > y

x ist größer als y

x <= y

x ist kleiner oder GLEICH y

x >= y

x ist größer oder GLEICH y

Brauchst du beim vergleichen von Zahlen

Simon221585  01.08.2020, 09:21
@ColinOW

Das geht auch nicht! Schau dir das mal an, du machst toUpperCase und Vergleichst das mit dem kleingeschriebenen, da kommt immer false raus.

mach toLowerCase bei beiden

Dann funktioniert es

du kannst statt den Case zu ändern und dann equals zu machen, bei Strings auch sagen:

equalsIgnoreCase dann wird die groß und klein Schreibweise ignoriert.

ColinOW 
Beitragsersteller
 01.08.2020, 09:22
@Simon221585

Oh ja, ignoriere das bitte. im echten code sind die Gross geschrieben. Es geht aber trotzdem nicht..

Simon221585  01.08.2020, 09:23
@ColinOW

Lad mal den ganzen Code auf hastebin oder pastebin hoch und lass es mich nochmal komplett sehen.

ColinOW 
Beitragsersteller
 01.08.2020, 09:45
@Simon221585

Danke mann,

Du warst mir eine grosse hilfe. Danke das du dir die Zeit genommen hast und meinen Code verbessert und Repariert hast (:

MFG Colin

ColinOW 
Beitragsersteller
 01.08.2020, 10:22
@Simon221585

Ein letztes mal nochmal,

Wie kann ich jetzt noch ein Drittes Argument abfragen? Also..

inputSplitted[2]

wie tu ich das Abfragen

Letztes mal MFG

Simon221585  01.08.2020, 10:23
@ColinOW

inputSplitted[2] das wäre dein drittes Element, zuerst solltest du natürlich schauen ob der Array so lange ist.

inputSplitted.length == 3 && inputSplitted[2]

Ich hab jetzt den Gleich Operator genommen, aber in gewissen Fällen braucht man auch größer oder gleich >=

Simon221585  01.08.2020, 14:56
@ColinOW

Schau das die abfragen richtig verschachtelt sind und nutz beim Scanner nicht next(); sondern nextLine();