Quelques précisions sur la lecture de données en Java

Les choses ne sont pas très simples pour lire des données en Java. Lorsque l’on utilise un Scanner, il faut bien comprendre ce que font les différentes méthodes associées :

  • nextInt() lit un entier. Mais l’utilisateur a également tapé [ENTREE] après les chiffres et ceci est un caractère que nextInt() ne  traite pas. Ce saut de ligne est donc toujours disponible.
  • nextLine() lit une chaîne de caractères ainsi que le saut de ligne qui suit. Pas de problèmes donc pour enchaîner des nextLine() dans un programme. Mais si votre nextLine() suit un nextInt(), le saut de ligne que n’a pas traité nextInt() est toujours là. Et nextLine() a le saut de ligne qu’il attend et donc considère que l’utilisateur a entré une chaîne vide.

Il est donc conseillé de supprimer le saut de ligne que nextInt() ne traite pas en faisant suivre chaque nextInt() d’un nextLine() inutilisé.

Au lieu d’écrire :

nb=s.nextInt();
...
ch=s.nextLine();

Il faut écrire :

nb=s.nextInt();
s.nextLine();
...
ch=s.nextLine();