0% ont trouvé ce document utile (0 vote)
5 vues8 pages

Utiliser Scanner pour la saisie en Java

Transféré par

mouazabdoulayeadoum
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats RTF, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues8 pages

Utiliser Scanner pour la saisie en Java

Transféré par

mouazabdoulayeadoum
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats RTF, PDF, TXT ou lisez en ligne sur Scribd

Après la lecture de ce chapitre, vous pourrez saisir des informations et les stocker dans des variables afin

de pouvoir les utiliser a posteriori.

En fait, jusqu'à ce que nous voyions les interfaces graphiques, nous travaillerons en mode console. Donc,
afin de rendre nos programmes plus ludiques, il est de bon ton de pouvoir interagir avec ceux-ci. Par
contre, ceci peut engendrer des erreurs (on parlera d'exceptions, mais ce sera traité plus loin). Afin de ne
pas surcharger le chapitre, nous survolerons ce point sans voir les différents cas d'erreurs que cela peut
engendrer.

La classe Scanner

Je me doute qu'il vous tardait de pouvoir communiquer avec votre application… Le moment est enfin
venu ! Mais je vous préviens, la méthode que je vais vous donner présente des failles. Je vous fais
confiance pour ne pas rentrer n'importe quoi n'importe quand !

Je vous ai dit que vos variables de type String sont en réalité des objets de type String. Pour que Java
puisse lire ce que vous tapez au clavier, vous allez devoir utiliser un objet de type Scanner. Cet objet peut
prendre différents paramètres, mais ici nous n'en utiliserons qu'un : celui qui correspond à l'entrée
standard en Java. Lorsque vous faites [Link]();, je vous rappelle que vous appliquez la
méthode println() sur la sortie standard ; ici, nous allons utiliser l'entrée standard [Link]. Donc, avant
d'indiquer à Java qu'il faut lire ce que nous allons taper au clavier, nous devrons instancier un objet
Scanner. Avant de vous expliquer ceci, créez une nouvelle classe et tapez cette ligne de code dans votre
méthode main :

Scanner sc = new Scanner([Link]);

Vous devez avoir une jolie vague rouge sous le mot Scanner. Cliquez sur la croix rouge sur la gauche et
faites un double-clic sur Import 'Scanner' [Link] (figure suivante). Et là, l'erreur disparaît !

Importer la classe Scanner

Importer la classe Scanner

Maintenant, regardez au-dessus de la déclaration de votre classe, vous devriez voir cette ligne :
import [Link];

Voilà ce que nous avons fait. Je vous ai dit qu'il fallait indiquer à Java où se trouve la classe Scanner. Pour
faire ceci, nous devons importer la classe Scanner grâce à l'instruction import. La classe que nous
voulons se trouve dans le package [Link].

Un package est un ensemble de classes. En fait, c'est un ensemble de dossiers et de sous-dossiers


contenant une ou plusieurs classes, mais nous verrons ceci plus en détail lorsque nous ferons nos
propres packages.

Les classes qui se trouvent dans les packages autres que [Link] (package automatiquement importé
par Java, on y trouve entre autres la classe System) sont à importer à la main dans vos classes Java pour
pouvoir vous en servir. La façon dont nous avons importé la classe [Link] dans Eclipse est très
commode. Vous pouvez aussi le faire manuellement :

//Ceci importe la classe Scanner du package [Link]

import [Link];

//Ceci importe toutes les classes du package [Link]

import [Link].*;

Récupérer ce que vous tapez

Voici l'instruction pour permettre à Java de récupérer ce que vous avez saisi pour ensuite l'afficher :
Scanner sc = new Scanner([Link]);

[Link]("Veuillez saisir un mot :");

String str = [Link]();

[Link]("Vous avez saisi : " + str);

Une fois l'application lancée, le message que vous avez écrit auparavant s'affiche dans la console, en bas
d'Eclipse. Pensez à cliquer dans la console afin que ce que vous saisissez y soit écrit et que Java puisse
récupérer ce que vous avez inscrit (figure suivante) !

Saisie utilisateur dans la console

Saisie utilisateur dans la console

Si vous remplacez la ligne de code qui récupère une chaîne de caractères comme suit :

Scanner sc = new Scanner([Link]);

[Link]("Veuillez saisir un nombre :");

int str = [Link]();

[Link]("Vous avez saisi le nombre : " + str);

… vous devriez constater que lorsque vous introduisez votre variable de type Scanner et que vous
introduisez le point permettant d'appeler des méthodes de l'objet, Eclipse vous propose une liste de
méthodes associées à cet objet (ceci s'appelle l'autocomplétion) ; de plus, lorsque vous commencez à
taper le début de la méthode nextInt(), le choix se restreint jusqu'à ne laisser que cette seule méthode.

Exécutez et testez ce programme : vous verrez qu'il fonctionne à la perfection. Sauf… si vous saisissez
autre chose qu'un nombre entier !

Vous savez maintenant que pour lire un int, vous devez utiliser nextInt(). De façon générale, dites-vous
que pour récupérer un type de variable, il vous suffit d'appeler next<Type de variable commençant par
une majuscule> (rappelez-vous de la convention de nommage Java).

Scanner sc = new Scanner([Link]);

int i = [Link]();

double d = [Link]();

long l = [Link]();

byte b = [Link]();

//Etc.

Il y a un type de variables primitives qui n'est pas pris en compte par la classe Scanner : il s'agit du type
char.

Voici comment on pourrait récupérer un caractère :

[Link]("Saisissez une lettre :");


Scanner sc = new Scanner([Link]);

String str = [Link]();

char carac = [Link](0);

[Link]("Vous avez saisi le caractère : " + carac);

Qu'avons-nous fait ici ? Nous avons récupéré une chaîne de caractères, puis utilisé une méthode de
l'objet String (ici, charAt(0) ) afin de récupérer le premier caractère saisi. Même si vous tapez une longue
chaîne de caractères, l'instruction charAt(0) ne renverra que le premier caractère.

Vous devez vous demander pourquoi charAt(0) et non charAt(1) : nous aborderons ce point lorsque nous
verrons les tableaux… Jusqu'à ce qu'on aborde les exceptions, je vous demanderai d'être rigoureux et de
faire attention à ce que vous attendez comme type de données afin d'utiliser la méthode
correspondante.

Une précision s'impose, toutefois : la méthode nextLine() récupère le contenu de toute la ligne saisie et
replace la « tête de lecture » au début d'une autre ligne. Par contre, si vous avez invoqué une méthode
comme nextInt(), nextDouble() et que vous invoquez directement après la méthode nextLine(), celle-ci
ne vous invitera pas à saisir une chaîne de caractères : elle videra la ligne commencée par les autres
instructions. En effet, celles-ci ne repositionnent pas la tête de lecture, l'instruction nextLine() le fait à
leur place. Pour faire simple, ceci :

import [Link];

public class Main {


public static void main(String[] args){

Scanner sc = new Scanner([Link]);

[Link]("Saisissez un entier : ");

int i = [Link]();

[Link]("Saisissez une chaîne : ");

String str = [Link]();

[Link]("FIN ! ");

… ne vous demandera pas de saisir une chaîne et affichera directement « Fin ». Pour pallier ce problème,
il suffit de vider la ligne après les instructions ne le faisant pas automatiquement :

import [Link];

public class Main {


public static void main(String[] args){

Scanner sc = new Scanner([Link]);

[Link]("Saisissez un entier : ");

int i = [Link]();

[Link]("Saisissez une chaîne : ");

//On vide la ligne avant d'en lire une autre

[Link]();

String str = [Link]();

[Link]("FIN ! ");

En résumé
La lecture des entrées clavier se fait via l'objet Scanner.

Ce dernier se trouve dans le package [Link] que vous devrez importer.

Pour pouvoir récupérer ce vous allez taper dans la console, vous devrez initialiser l'objet Scanner avec
l'entrée standard, [Link].

Il y a une méthode de récupération de données pour chaque type (sauf les char) : nextLine() pour les
String, nextInt() pour les int ...

Vous aimerez peut-être aussi