Java, Index 1 out of bounds for length 1?
Tag,
Kann mir jemand sagen, was genau ich hier Falsch gemacht habe?
public static void startPrompt() {
Scanner in = new Scanner(System.in);
Strings.input = in.next();
String inputSplitted[] = Strings.input.split(" "); // String input "split"
if(inputSplitted[0].equals("hey")) { // Soll das 1te Wort testen
if(inputSplitted[1].equals("version")) { // dass 2te Wort testen
System.out.println("Endlich, es klappt!"); //'hey version'
startPrompt();
} else {
System.out.println("So nicht! (Fehler)");
startPrompt();
}
startPrompt(); // Falls nur 'hey' eingegeben wurde
System.out.println("Wirklich, keine Arguemnte?");
}
}
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
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
Danke, hat mir sehr geholfen.
Aber noch 1 Frage, wo ist der unterschied zwischen >= oder <= und < oder >
(Bin anfänger (:)
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? ^^
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
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.
Oh ja, ignoriere das bitte. im echten code sind die Gross geschrieben. Es geht aber trotzdem nicht..
Lad mal den ganzen Code auf hastebin oder pastebin hoch und lass es mich nochmal komplett sehen.
Das funktioniert, den Test siehst du unten links.
Hab dir ein kleines Programm geschrieben:
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
https://pastebin.com/Nsz1T2qu das funktioniert jetzt auch, das ist ein Teil deines Codes.
Habs bissl bearbeitet, du solltest vom Scanner die Methode nextLine verwenden und nicht next.
Ein letztes mal nochmal,
Wie kann ich jetzt noch ein Drittes Argument abfragen? Also..
inputSplitted[2]
wie tu ich das Abfragen
Letztes mal MFG
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 >=
also jetzt mal ohne witz, ich glaube mein java ist kaputt xD
Jetzt gibt es wieder keinen Output..
wenn du nicht mehr willst ,musst nicht c:
Schau das die abfragen richtig verschachtelt sind und nutz beim Scanner nicht next(); sondern nextLine();
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.