Problème try catch sous JAVA

Résolu
Abdou -  
 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 :
.....
A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
Abdou
 
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
Abdou
 
SLT

PAS D'ERREUR SI ON ECRIT: try{} catch(){}; //point virgule après l'instruction.
-3
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
-1
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.
0