Problème try catch sous JAVA

[Résolu/Fermé]
Signaler
-
 Utilisateur anonyme -
Bonjour, Tout le monde je voudrais vérifier un input,

import java.util.*;
public class Executable2 {
public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int c=0;
boolean v=false;

System.out.println("Donner une valeur : ");
while(v==false){
try{c=sc.nextInt(); v=true;}
catch(InputMismatchException m){System.out.println("Entrez un Entier : ");}
}
System.out.println("Bravo : "+c);
}
}

le problème est : try{c=sc.nextInt(); v=true;} ne s'exécute pas dès la 2e itération,....
une boucle infinie de l'instruction : catch(){s.o.p....}
Entrez un Entier :
Entrez un Entier :
Entrez un Entier :
.....

2 réponses

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
Bon en fait c'est la même erreur que celle que je vois souvent, mais comme elle est présenté différemment, je ne l'ai pas trouvé tout de suite ^^

En fait quand on fait nextInt, et qu'on appuie sur Entrée, le \n reste coincé dans le System.in et il faut l'évacuer manuellement, sinon à chaque essai, il va voir un \n, s'arrêter juste avant (et donc récupérer une chaîne vide) qui génère l'exception et recommence ad vitam æternam...

Pour corriger cela il faut donc vider la ligne avec un nextLine, et c'est là où j'ai eu un peu mal, car il faut rajouter cette instruction dans un bloc finally de sorte qu'elle soit exécuté que cela plante ou non !

System.out.print("Entrez une valeur : ");

boolean continuer=true;		
while (continuer)
{ 
	try
	{
		c=sc.nextInt();
		continuer = false;
	}
	catch(InputMismatchException e)
	{
		System.out.print("Entrez un entier : ");
	}
	finally
	{
		sc.nextLine();
	}
}

Remarque : plutôt que d'utiliser des traitements d'exceptions, il est bien plus propre de faire comme ça :

System.out.print("Entrez une valeur : ");
				
while (!sc.hasNextInt())
{
	sc.nextLine();
	System.out.print("Entrez un Entier : ");
}

int c = sc.nextInt();
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

BIG THANKS ! MERCI FRERO!
j'ai remarqué le Finally qd je clique sur l'erreur mais j'ai pas réagi !
merci pour tout.
SLT

PAS D'ERREUR SI ON ECRIT: try{} catch(){}; //point virgule après l'instruction.
Utilisateur anonyme
Salut,

C'est normal il n'y a rien dans le bloc try{... donc rien à "catcher"
C'est comme si tu n'avais rien écri.

Mais si tu saisis une valeur non numérique tu auras quand même une belle exception, et tu ne pouras rien en faire...
Dan
Utilisateur anonyme > Utilisateur anonyme
Cette réponse concernait le message d'Abdou:

PAS D'ERREUR SI ON ECRIT: try{} catch(){}; //point virgule après l'instruction.