Java InputMismatchException
J'ai ce code et j'ai envie d'attraper la lettre d'exception, mais il continue à avoir ces erreurs:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at exercise_one.Exercise.main(Exercise.java:17)
Et voici mon code:
System.out.print("Enter the number of students: ");
students = input.nextInt();
while (students <= 0) {
try {
System.out.print("Enter the number of students: ");
students = input.nextInt();
}
catch (InputMismatchException e) {
System.out.print("Enter the number of students");
}
}
La première
Oui, il semble que ce soit le cas, mais comment puis-je vérifier pour les deux (lettre et les nombres négatifs exception)?
Facile. Il suffit de supprimer les 2 premières lignes de code que vous avez posté.
Si je supprime les deux premières lignes puis je vais avoir une erreur dans la boucle while parce que les élèves ont l'habitude d'une valeur
Non, vous ne le seront pas.
students = input.nextInt();
n'est pas à l'intérieur de la try
bloc et votre entrer dans quelque chose qui ne peut pas être stockée dans un int
.Oui, il semble que ce soit le cas, mais comment puis-je vérifier pour les deux (lettre et les nombres négatifs exception)?
Facile. Il suffit de supprimer les 2 premières lignes de code que vous avez posté.
Si je supprime les deux premières lignes puis je vais avoir une erreur dans la boucle while parce que les élèves ont l'habitude d'une valeur
Non, vous ne le seront pas.
students
est un int
, et ils ont toujours une valeur (la valeur par défaut est 0).OriginalL'auteur John Stef | 2013-05-29
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une boucle while au lieu d'éliminer la première
input.nextInt()
.Par conséquent, tous les
InputMismatchException
peuvent être traitées dans un seul endroit.Comme l'a écrit, si une InputMismatchException se produit, alors il sera d'impression
Enter the number of studentsEnter the number of students:
. Il peut être bon de remplacer le deuxième impression avec quelque chose commeSystem.out.println("Invalid input. Please enter a number.")
de sorte que l'utilisateur sait qu'ils ont fait quelque chose qu'ils n'étaient pas censés le faire, et si vous avez une ligne de démarcation entre le rapide et le message d'erreur"".OriginalL'auteur Siyu Song
de la doc
De sorte qu'il semble que vous ne saisissez pas tout entier à l'entrée.
vous pouvez utiliser
désolé pour l'erreur... vous entrez d'entrée autres que les entier..
Si quelqu'un tape dans une chaîne de caractères comme
abc
, ou il tape dans un nombre qui ne peut pas être exprimé dans unint
, lenextInt()
méthode de jeter l'exception. Voir docs.oracle.com/javase/7/docs/api/java/util/....Je sais que la seule entrée correcte est des entiers, mais je voulais prendre le cas étaient l'utilisateur appuie sur 0 ou un nombre négatif, ce qui, je le fixer avec la boucle while et si l'utilisateur appuie peut-être accidentellement une lettre au lieu d'un nombre. Dans ce cas, je voudrais être manipulés correcty et le code ne rompt pas
avez-vous réussi à résoudre ce problème? si il n'y a aucun problème, vous pouvez mettre à jour la question
OriginalL'auteur stinepike