Table des matières:
- Importation de la classe Scanner en Java
- Déclaration et création d'un objet Scanner en Java
- Obtenir l'entrée
Vidéo: 6 - Lire une saisie clavier avec la classe Scanner Java 2024
Jusqu'à Java 1. 5, obtenir du texte de la part de l'utilisateur dans un programme Java basé sur la console n'était pas facile. Mais avec Java 1. 5, une nouvelle classe - appelée
Scanner
- a été introduite pour simplifier la tâche d'obtenir des entrées de l'utilisateur. Ici, vous utilisez la classe
Scanner
pour obtenir des valeurs d'entrée simples de l'utilisateur. Les techniques que je présente ici sont utilisées dans de nombreux programmes présentés dans le reste de ce livre.
Si vous utilisez une ancienne version de Java, vous devriez toujours lire ceci, car de nombreux programmes utilisent la classe
Scanner
.
Le programme simple ci-dessous utilise la classe
Scanner
pour lire une valeur entière de l'utilisateur, puis affiche la valeur sur la console pour vérifier que le programme a reçu la valeur entrée par l'utilisateur. Voici un exemple de la fenêtre de la console pour ce programme:
Entrez un nombre entier: 5
Vous avez entré 5.
Le programme commence par afficher le message
Entrez un nombre entier:
sur la première ligne. Ensuite, il vous attend pour entrer un numéro. Lorsque vous tapez un nombre (par exemple 5) et appuyez sur la touche Entrée, le message de confirmation (
Vous avez saisi 5
.) Apparaît sur la deuxième ligne.
importer java. util. Scanner; @@ ra1
public class ScannerApp
{
statique Scanner sc = nouveau Scanner (System.in); @@ ra6
public static void principal (String [] args)
{
Système. en dehors. print ("Entrez un entier:"); @@ ra10
int x = sc. nextInt (); @@ ra11
Système. en dehors. println ("Vous avez entré" + x + "."); @@ ra12
}
}
Importation de la classe Scanner en Java
Avant de pouvoir utiliser la classe
Scanner
dans un programme, vous devez l'importer. Pour ce faire, vous codez une instruction
import
au début du programme, avant la déclaration de la classe:
import java. util. Scanner;
Notez que
java
et
util
ne sont pas en majuscules, mais
Scanner
l'est.
Si vous utilisez d'autres classes dans le fichier java
. Util
package, vous pouvez importer le package entier en codant l'instruction
import
comme ceci:
import java. util. *;
Déclaration et création d'un objet Scanner en Java
Avant de pouvoir utiliser la classe
Scanner
pour lire les entrées de la console, vous devez déclarer une variable
Scanner
et créer une instance de la classe
Scanner
. Vous pouvez créer la variable
Scanner
en tant que variable de classe et créer l'objet
Scanner
dans l'initialiseur de variable de classe, comme illustré à la ligne 6 du programme ci-dessus:
Scanner statique sc = nouveau Scanner (System in.);
De cette façon, vous pouvez utiliser la variable
sc
dans n'importe quelle méthode de la classe.
Pour créer un objet
Scanner
, utilisez le mot clé
new
suivi d'un appel au constructeur de la classe
Scanner
. Notez que la classe
Scanner
nécessite un paramètre qui indique le flux d'entrée d'où provient l'entrée. Vous pouvez utiliser
Système. dans
ici pour spécifier une entrée de console clavier standard.
Obtenir l'entrée
Pour lire une valeur d'entrée de l'utilisateur, vous pouvez utiliser l'une des méthodes de la classe
Scanner
répertoriées ci-dessous. Comme vous pouvez le voir, le type de données primitif a une méthode séparée.
Méthode | Explication |
boolean nextBoolean ()
|
Lit une valeur
boolean
de l'utilisateur. |
octet nextByte ()
|
Lit une valeur
octet
de l'utilisateur. |
double doubleDouble ()
|
Lit une valeur
double
de l'utilisateur. |
float nextFloat ()
|
Lit une valeur
float
de l'utilisateur. |
int nextInt ()
|
Lit une valeur
int
de l'utilisateur. |
String nextLine ()
|
Lit une valeur
String
de l'utilisateur. |
long nextLong ()
|
Lit une valeur
long
de l'utilisateur. |
short nextShort ()
|
Lit une valeur
short
de l'utilisateur. |
Notez dans la première colonne du tableau que chaque liste de méthodes commence par le type de la valeur renvoyée par la méthode. La méthode
nextInt
, par exemple, renvoie une valeur
int
. Notez également que chacune des méthodes se termine par un ensemble vide de parenthèses. Cela signifie que ces méthodes ne nécessitent pas de paramètres. Si une méthode nécessite des paramètres, les paramètres sont listés entre parenthèses.
Comme ces méthodes lisent une valeur de l'utilisateur et renvoient la valeur, vous les utilisez le plus souvent dans les instructions qui affectent la valeur à une variable. La ligne 11, par exemple, lit un
int
et l'affecte à une variable nommée
x
.
Lorsque la méthode
nextInt
est exécutée, le programme attend que l'utilisateur entre une valeur dans la fenêtre de la console. Pour informer l'utilisateur du type d'entrée attendu par le programme, vous devez généralement appeler le système
. en dehors. print
méthode avant d'appeler une méthode
Scanner
pour obtenir une entrée. La ligne 10 appelle
Système. en dehors. print
pour afficher le message
Entrez un entier:
sur la console. De cette façon, l'utilisateur sait que le programme attend une entrée.
Si l'utilisateur entre une valeur qui ne peut pas être convertie au type correct, le programme se bloque, ce qui signifie qu'il se termine brutalement. Lorsque le programme se bloque, il affiche un message d'erreur cryptique qui indique la cause de l'échec. Si vous entrez
trois
au lieu d'un nombre réel, par exemple, la fenêtre de la console ressemble à ceci:
Entrez un entier: trois Exception dans le thread "main" java. util. InputMismatchException
à java. util. Scanner. throwFor (Scanner.java: 819)
sur Java. util. Scanner. next (Scanner java: 1431)
sur java. util. Scanner. nextInt (Scanner.java: 2040)
sur Java. util. Scanner. nextInt (Scanner.java: 2000)
sur ScannerApp.main (ScannerApp.java: 11)
Ce message indique qu'une exception appelée
InputMismatchException
est survenue, ce qui signifie que le programme s'attendait à voir un entier mais aurait obtenu autre chose. Si vous ne savez pas comment prévoir des exceptions comme celles-ci pour que le programme puisse afficher un message plus convivial et donner à l'utilisateur une autre chance d'entrer une valeur correcte, vous devez accepter le fait que si l'utilisateur saisit des données incorrectes, votre programme se bloque de façon désagréable.
Vous pouvez empêcher le
nextInt
et les méthodes similaires de planter avec des données d'entrée incorrectes en utilisant d'abord l'une des méthodes répertoriées ici pour tester l'entrée suivante pour s'assurer qu'elle est valide.
Méthode | Explication |
boolean hasNextBoolean ()
|
Renvoie
true
si la valeur suivante saisie par l'utilisateur est valide < valeur booléenne
.
boolean hasNextByte () |
Renvoie
|
true
si la prochaine valeur entrée par l'utilisateur est une valeur
octet
valide.
boolean hasNextDouble () |
Renvoie
|
true
si la prochaine valeur entrée par l'utilisateur est une valeur
double
valide.
boolean hasNextFloat () |
Renvoie
|
true
si la prochaine valeur entrée par l'utilisateur est une valeur
float
valide.
boolean hasNextInt () |
Renvoie
|
true
si la prochaine valeur entrée par l'utilisateur est une valeur
int
valide.
boolean hasNextLong () |
Renvoie
|
true
si la prochaine valeur entrée par l'utilisateur est une valeur
long
valide.
boolean hasNextShort () |
Renvoie
|
true
si la prochaine valeur entrée par l'utilisateur est une valeur
courte
valide.
|