Problème try catch sous JAVA
Résolu
Abdou
-
Utilisateur anonyme -
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 :
.....
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:
- Problème try catch sous JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
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 !
Remarque : plutôt que d'utiliser des traitements d'exceptions, il est bien plus propre de faire comme ça :
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();
j'ai remarqué le Finally qd je clique sur l'erreur mais j'ai pas réagi !
merci pour tout.