Java string index out of range: 0
Habe ich das problem, sobald ich in meiner ersten Eingabe stürzt das Programm ab und ich bekomme
String index out of range: 0
Ist, habe ich mich an anderer Stelle und versuchte zu finden, mein Fehler, aber ich fand andere Probleme, die nicht das sind, was ich hatte. Könnte mir bitte jemand sagen, wo ich falsch gegangen?.
Danke für Eure Hilfe, hier ist der code:
import java.util.Scanner;
public class Assignment1Q2 {
public static void main(String[] args) {
System.out.println("Thank you for your call,\nPlease take some time to answer a few questions");
collectData();
}//end of main
public static void collectData() {
Scanner userInput = new Scanner(System.in);
int age;
char gender;
char show;
int over30MY = 0, over30FY = 0, under30MY = 0, under30FY = 0;
int over30MN = 0, over30FN = 0, under30MN = 0, under30FN = 0;
System.out.println("\nWhat is your age?\n");
age = userInput.nextInt();
System.out.println("Male or Female (Enter M or Y)");
gender = userInput.nextLine().charAt(0);
gender = Character.toLowerCase(gender);
System.out.println("Do you watch the show regularly? (Enter Y or N)");
show = userInput.nextLine().charAt(0);
show = Character.toLowerCase(show);
if((age > 30) && (gender == 'm') && (show == 'y')) {
over30MY++;
}
else if((age > 30) && (gender == 'f') && (show == 'y')) {
over30FY++;
}
else if((age < 30) && (gender == 'm') && (show == 'y')) {
under30MY++;
}
else if((age < 30) && (gender == 'f') && (show == 'y')) {
under30FY++;
}
else if((age > 30) && (gender == 'm') && (show == 'n')) {
over30MN++;
}
else if((age > 30) && (gender == 'f') && (show == 'n')) {
over30FN++;
}
else if((age < 30) && (gender == 'm') && (show == 'n')) {
under30MN++;
}
else if((age < 30) && (gender == 'f') && (show == 'n')) {
under30FN++;
}//end of if else
}//end of collectData
}//end of class
- Warum, ohhh warum denken Menschen, dass der stack trace ist unwichtig? Obwohl, in diesem Fall gibt es nur 2 Möglichkeiten .... Trotzdem!
- dies ist, wo Sie tatsächlich sagen Sie ihm, welche Möglichkeiten es gibt, und warum die stack-traces sind wichtig und nicht veröffentlichen Sie Ihre völlig nutzlosen Kommentar.
- Es hilft wirklich, zu erweitern, zumindest den Teil von Ihr stack-trace von dem, was der eigentliche Fehler ist, und die Linie, auf der es Auftritt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem liegt in dieser Zeile:
Den nextLine - () Methode scannt alles, was auf der aktuellen Zeile und dann bewegt sich der Zeiger Vergangenheit, die Linie. Also, wenn Sie rufen die charAt () - Methode, die Sie anrufen, es auf die nächste Zeile, die leer ist der Raum, und somit ein Fehler Auftritt.
Stattdessen ändern Sie diese Zeile auf:
Beachten Sie, dass dies bedeutet, dass andere Teile des Codes müssen auch geändert.
Edit:
War über Bearbeiten meine Lösung, aber @Marc-Andre ergänzte seine Antwort, die ihn bedeckt, so dass Sie nur werfen Sie Ihre Augen über es zu.
Ist das problem, wenn du tust
age = userInput.nextInt();
ist, dass Sie haben wahrscheinlich geben Sie eine Zahl sagen, 4 und drücken Sie dann die EINGABETASTE.Also der scanner Lesen Sie 4, wenn Sie anrufen
nextInt
aber die neue Zeile wird nicht verbrauchen. Das bedeutet, dass, wenn Sie tun :userInput.nextLine().charAt(0);
Sie verbraucht sind, die neue Linie, die dienextLine()
wird ein leerer String zurückgegeben. Da machst duchartAt
auf eine leere Zeichenfolge ist, geben Sie eine Ausnahme.Könnten Sie tun:
Dieser verbraucht die neue Linie, so dass der stream leer sein sollten. Du musst also nicht die Ausnahme, und Sie können Fragen für die nächste Eingabe.