J'apprends actuellement des blocs de code Try-Catch et j'écris un morceau de code qui prend une entrée d'un utilisateur et des chèques si son entier ou non. Mon code est
Hello! Please enter how many Students you have in your class: asdfsda Invalid input. please make sure you enter numbers ONLY! No symbols or letters. Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:939) at java.base/java.util.Scanner.next(Scanner.java:1594) at java.base/java.util.Scanner.nextInt(Scanner.java:2258) at java.base/java.util.Scanner.nextInt(Scanner.java:2212) at ExcerciseOne.main(ExcerciseOne.java:65)
3 Réponses :
Vous attrapez l'exception projetée dans la clause ESSAY CODE>, mais vous lisez ensuite à partir du scanner à l'intérieur du
Attraper code> à nouveau et en jetant une autre exception, ce temps imprévu.
classSize = in.nextInt();
D'accord. Je vois le problème, mais comment serait-il corrigé? Je veux fondamentalement l'utilisateur lorsque le bloc de capture est utilisé pour ré-entrer un numéro. Dois-je faire une capture d'essai dans une capture d'essai?
C'est ce que la boucle est pour, non? S'ils échouent, il sera en boucle à la clause code> code>. Je ne vois aucune raison de demander une entrée lors de la clause code> code>.
Le Ce que vous pouvez faire est de supprimer les appels ou mieux: p> car in.NexTint () code> Invocation à l'intérieur du bloc CODE> Block lit le mauvais flux laissé derrière par la première invocation de
in.Nexint () code > Dans le
essayez code> bloc.
.nexint () code> dans le bloc code> bloc: p>
INPUTMISMATCHEXCEPTION code> est une sous-classe de
RunTimeException code>, le type d'erreur qui Jette cette erreur peut être filtrée par
si code> déclarations. Comme vous n'avez besoin que d'un entier approprié comme entrée, vous pouvez valider l'entrée à l'aide d'une expression régulière. P>
boolean hasError = true;
String integerRegex = "[\\d]+"; // it means 1-to-many digits
while (hasError) {
System.out.println("Hello! Please enter how many Students you have in your class: ");
String input = in.nextLine();
if (input.matches(integerRegex)) {
classSize = Integer.parseInt(input);
hasError = false;
} else {
System.out.println("Invalid input. please make sure you enter numbers ONLY! No symbols or letters.");
// variable hasError remains true
}
}
Bon rapport qualité prix Répondre sur différents types d'exceptions.
La réponse de Gendarme est claire et j'ajoute une démonstration correcte pour vous:
public static void main(String[] args) { int studentsCount = 0; boolean hasError; do { try { System.out.println("Hello! Please enter how many Students you have in your class: "); Scanner in = new Scanner(System.in); studentsCount = in.nextInt(); hasError = false; } catch (InputMismatchException e) { System.out.println("--> Invalid input. please make sure you enter numbers ONLY! No symbols or letters."); hasError = true; } } while (hasError); System.out.println("There are " + studentsCount + " students in your class."); }
Regardez la ligne où l'exception est lancée. Je parie que ce n'est pas dans le bloc CODE> ESSAYER CODE> BLOCK mais dans le bloc code> bloquer code>.