Hello,
J'étais en train de montrer à des amis comment fonctionnaient les exceptions en java et je suis tombé sur un cas que je n'avais jamais traité auparavant. J'ai cherché de mon côté mais personne n'a su m'expliquer pourquoi cela fonctionnait ainsi (pas même mon enseignante).
Ce cas spécifique est le suivant : Je dois saisir 2 entiers à tour de rôle, j'ai donc déclaré un scanner tout à fait classique et je fais 2 appels à la méthode nextInt(), jusque la rien de très fou.
Afin de contrer une erreur de saisie (ex : chaîne de caractère, ..), j'ai entouré chaque appel a nextInt() avec un bloc try / catch affichant un message d'erreur et faisant éventuellement quelques traitements à côté.
Cependant, si je provoque une exception lors du premier nextInt(), le message s'affiche, et au moment du second, je ne peux pas saisir et l'exception est levée directement !
Je vous pose le code ci-dessous :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import java.util.Scanner; public class Test { public static void main(String args[]){ Scanner sc = new Scanner(System.in); Scanner sc2 = new Scanner(System.in); int a,b; System.out.println("Saisie du premier entier :"); try{a=sc.nextInt();} catch(Exception e1){ System.out.println("Exception bloc 1"); //Traitement } System.out.println("Saisie du second entier :"); try{b=sc.nextInt();} catch(Exception e2){ System.out.println("Exception bloc 2"); //Traitement } } }
Afin de comprendre, lancez le programme et essayez de taper par exemple "azert" lors de la première série, l'exception s'affichera, suivie de l'affichage demandant la saisie du second et finalement le 2e bloc d'exception !
J'imagine que ça doit être lié au Scanner qui déclenche l'erreur mais j'aimerais bien comprendre le fonctionnement de tout ça !
PS : Je sais que le code est dégueulasse et qu'il faut faire une fonction pour chaque saisie par exemple, mais ce n'est pas le problème, je souhaite juste comprendre ce détail
Merci d'avance pour ceux qui auront une petite réponse à donner
Bonne soirée![]()
Partager