Ich versuche, eine Eingabezeichenfolge in ein Array aufzuteilen und dann etwas mit jedem Index des Arrays zu tun; Allerdings scheint das Array immer nur Größe 1 zu haben, egal wie viele Teile meine Saite hat.ArrayIndexOutOfBoundsException nach String.split (\ s)
Hier ist der Code:
public void game() {
// print prompt and take input
System.out.print(">");
String string1 = in.next();
while (string1.length() != 0) {
// splitting newArray into command and arguments
String[] newArray = new String[4];
newArray = string1.split("\\s+");
String command = newArray[0];
String newString = newArray[1];
String newString2 = newArray[2];
if (newString != null && newString2 != null){
int arg1 = Integer.parseInt(newString);
int arg2 = Integer.parseInt(newString2);
Cell c = cells[arg1][arg2];
if (command == "u") {
if (c.getMarked() == true) {
break; } // end if
else if (c.getMined() == true) {
uncoverAll();
System.out.println("You lose!");
break; } // end else if
else {
c.setUncovered();
if (allMinesMarked() == true && allNonMinesUncovered() == true) {
System.out.println("You win!");
break;
} // end if
} // end else
} // end if for "u"
else if (command == "m") {
if (c.getCovered() == false) {
break; } // end if
else if (c.getMarked() == true) {
c.setMarked(true); } // end else if
else {
c.setMarked(true);
if (allMinesMarked() == true && allNonMinesUncovered() == true) {
System.out.println("You win!");
break;
} // end if
} // end else
} // end else if for "m"
} // end if
else if (command == "show") {
show(); // prints the board
}
else if (command == "q") {
break; // exits while loop
}
else {
System.out.println("Bad command.");
}
System.out.print(">");
string1 = in.next();
} // end while
} // end game()
Stacktrace:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at MineSweeper.game(MineSweeper.java:215)
at MineSweeper.play(MineSweeper.java:271)
at Driver.main(Driver.java:4)
Was ich versuche zu erreichen newArray
in einen 'Befehl' (newArray[0]
) zu spalten, und 'Argumente' (newArray[1 and 2]
). Wenn keine Argumente vorhanden sind, wird der erste Codeabschnitt übersprungen. Wenn Argumente vorhanden sind, wird der Code ausgeführt. Aber was auch immer ich in die Befehlszeile eintippe, bekomme ich die ArrayIndexOutOfBoundsException
.
Gibt es eine Möglichkeit, den spezifischen Index des Arrays auf null
festzulegen, wenn es nicht durch string1.split("\\s+")
kommt? Ich habe versucht, -1
zum split()
Eintrag hinzuzufügen, aber es hat nichts getan.
Danke. Das funktioniert, wenn ich 3 Wörter eingabe, aber ich bekomme immer noch den Fehler, wenn String1 nur 1 Wort hat. Ich weiß es, weil es bei newArray [1] oder newArray [2] nichts gibt, gibt es also eine Möglichkeit, diese Indizes einfach auf null zu setzen? oder sie ignorieren, wenn nur 1 Wort eingegeben wird? – tylerhunter1
Wenn Sie nur ein Wort eingeben, erzeugt die angegebene Codezeile nur ein Array der Größe 1. Sie müssen die 'new String [4]' nicht vorinitialisieren –
Wenn ich verstehe, was Sie versuchen zu tun , dann solltest du vielleicht die Länge des Arrays überprüfen, bevor du versuchst, 'newArray [1]' oder 'newArray [2]' –