Problème try catch sous JAVA

Résolu/Fermé
Abdou - 4 mai 2012 à 16:35
 Utilisateur anonyme - 5 mai 2012 à 06:34
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 :
.....
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 mai 2012 à 17:15
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
BIG THANKS ! MERCI FRERO!
j'ai remarqué le Finally qd je clique sur l'erreur mais j'ai pas réagi !
merci pour tout.
0
SLT

PAS D'ERREUR SI ON ECRIT: try{} catch(){}; //point virgule après l'instruction.
-3
Utilisateur anonyme
4 mai 2012 à 18:05
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
-1
Utilisateur anonyme > Utilisateur anonyme
5 mai 2012 à 06:34
Cette réponse concernait le message d'Abdou:

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