Wie kann ich vermeiden, StringIndexOutOfBoundsException, wenn char hat keinen Wert?
Sorry, wenn der Titel keinen Sinn gemacht hat, aber ich wusste nicht wie ich zu Wort.
Das problem:
Mache ich ein multiple-choice-quiz-Spiel, das wird entweder a, b, c oder d von der Benutzer. Dies ist kein problem, wenn Sie tun, was Ihnen gesagt wird, aber wenn Sie nicht nichts eingeben und einfach enter drücken bekomme ich eine StringIndexOutOfBoundsException. Ich verstehe, warum dies geschieht, aber ich bin neu in Java und kann nicht denken Sie an einen Weg, um es zu beheben.
Was ich habe, so weit:
System.out.println("Enter the Answer.");
response = input.nextLine().charAt(0);
if(response == 'a')
{
System.out.println("Correct");
}
else if(response == 'b' || response == 'c' || response == 'd')
{
System.out.println("Wrong");
}
else
{
System.out.println("Invalid");
}
Natürlich das Programm wird es nie schaffen, vorbei an der zweiten code-Zeile, wenn der Benutzer nichts, weil Sie nicht über die charAt(0); dieser Wert ein leerer String ist. Was ich Suche ist etwas, das überprüfen wird, wenn die Antwort null ist, und wenn ja, Fragen Sie zurück und bitten die Frage zu den Benutzer wieder.
Vielen Dank im Voraus für alle Antworten.
- Ich gehe davon aus
input
ist der Typjava.util.Scanner
. Wenn das der Fall ist, dann wäre es tatsächlich eine leere Zeichenfolge zurückgeben, anstattnull
. - Ja, es wird die leere Zeichenfolge. Das ist, warum
input.nextLine().charAt(0);
generiert eine StringIndexOutOBoundsException
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine do-while-Schleife. Ersetzen Sie einfach
mit
Dies wird weiterhin zu nennen
input.nextLine()
wie oft der Nutzer eine leere Zeile, aber sobald Sie geben Sie eine nicht-leere Zeile weiter und setzenresponse
gleich das erste Zeichen, dass nicht-leere Zeile. Wenn Sie möchten, zu re-den Benutzer auffordern, für die Antwort, dann fügen Sie die Eingabeaufforderung, um das innere der Schleife. Wenn Sie möchten, um zu überprüfen, dass die vom Benutzer eingegebenen Buchstaben ' a ' –d man könnte auch hinzufügen, dass die Logik der Schleifenbedingung.Entweder behandeln der Ausnahme(
StringIndexOutOfBoundsException
) oder brechen diese Aussageals
Ausnahmebehandlung:
input.nextLine()
jenull
?Einfach:
Neben @HovercraftFullOfEels' (absolut gültigen) Antworten, möchte ich darauf hinweisen, dass Sie können "fangen" diese Ausnahmen. Zum Beispiel:
d.h. wenn ein
StringIndexOutOfBoundsException
ist aufgetreten beim ausführen dertry
-block, den code in diecatch
-block ausgeführt werden. Lesen Sie mehr über den Fang und die Behandlung von Ausnahmen hier.StringIndexOutofBoundException auftreten, wird in der folgenden situation auch.
Übereinstimmung mit der Zeichenfolge, die nicht verfügbar
ex:
Liste ans=new ArrayList();
temp="und";
String arr[]={"android","jellybean","kitkat","ax"};
für(int index=0;index < arr.length;index++ )
wenn(temp.length()<=arr[index].length())
wenn(temp.equlsIgnoreCase((String)arr [index].Teilfolge(0,temp.length())));
ans.add(arr[index]);
folgende code ist erforderlich, um zu vermeiden, indexoutofboundexception
if(temp.length()<=arr[index].length())
denn hier sind wir checken die Länge von src-string ist gleich oder größer als temp .
wenn der src-string-Länge ist weniger, als es wird durch "arrayindexoutof boundexception"