Java string index out of range: 0
J'ai ce problème où dès que je rentre de ma première entrée le programme se bloque et je reçois
String index out of range: 0
J'ai regardé ailleurs et essayé de trouver mes erreurs mais j'ai trouvé différents problèmes, qui ne sont pas ce que j'avais. Quelqu'un pourrait-il me dire où je l'ai mal tourné?.
Merci pour votre aide, voici le 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
Pourquoi, ohhh pourquoi les gens pensent que la trace de la pile est sans importance? Bien que, dans ce cas, il y a que 2 possibilités .... Néanmoins!
c'est là que vous avez réellement lui dire ce que sont les possibilités, et pourquoi les traces de pile sont importants plutôt que de l'affichage de votre complètement inutile commentaire.
Il aide vraiment à ajouter dans au moins la partie de votre stack trace de ce qui est l'erreur réelle, et la ligne à laquelle il se produit.
c'est là que vous avez réellement lui dire ce que sont les possibilités, et pourquoi les traces de pile sont importants plutôt que de l'affichage de votre complètement inutile commentaire.
Il aide vraiment à ajouter dans au moins la partie de votre stack trace de ce qui est l'erreur réelle, et la ligne à laquelle il se produit.
OriginalL'auteur user2704743 | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
Votre problème, c'est cette ligne:
La nextLine() la méthode balaye tout sur la ligne courante, puis avance le pointeur passé cette ligne. Ainsi, lorsque vous appelez la méthode charAt (), vous êtes en l'appelant sur la ligne suivante, qui est vide de l'espace, et donc une erreur se produit.
Au lieu de cela, modifier cette ligne:
Remarque, cela signifie que d'autres parties de votre code devra aussi changé.
Edit:
Était sur le point de modifier ma solution, mais @Marc-André ajouté sa réponse qui le recouvre, il suffit donc de jeter vos yeux aussi.
Rien ne dit "merci" de mieux que de recevoir une réponse (quand le temps le permet).
Était juste pour dire que moi-même! Merci
toujours en attente de la minuterie malheureusement
OriginalL'auteur Andrew Martin
Le problème lorsque vous êtes en train de faire
age = userInput.nextInt();
est que vous avez probablement entrer un numéro 4, puis appuyez sur Entrée.Alors le scanner lire 4 lorsque vous appelez
nextInt
mais la nouvelle ligne n'est pas en consommer. Cela signifie que lorsque vous faites :userInput.nextLine().charAt(0);
vous consommez de la ligne nouvelle, donc, lenextLine()
retourne une Chaîne vide. Puisque vous êtes en train de fairechartAt
sur une Chaîne vide, il vous donne une Exception.Que vous pouvez faire:
Cela permettra de consommer de la ligne nouvelle, de sorte que le flux doit être vide. Donc vous n'aurez pas l'exception, et vous pouvez demander pour l'entrée suivante.
OriginalL'auteur Marc-Andre