Retournons à notre morceau de code, pour mémoire :
Code : Java | Scanner sc = new Scanner(System.in);
|
Afin de vous préparer à saisir des informations, veuillez afficher un message à l'écran ; nous avons donc :
Code : Java | Scanner sc = new Scanner(System.in);
System.out.println("Veuillez saisir un mot :");
|
Maintenant, voici l'instruction pour permettre à Java de récupérer ce que vous avez saisi et ensuite de l'afficher :
Code : Java | Scanner sc = new Scanner(System.in);
System.out.println("Veuillez saisir un mot :");
String str = sc.nextLine();
System.out.println("Vous avez saisi : " + str);
|
Une fois l'application lancée, le message que vous avez écrit auparavant s'affiche dans la console, en bas dans Eclipse (vous avez l'habitude, maintenant

).
Pensez à cliquer dans la console, après votre message, afin que ce que vous saisissez soit écrit dans la console, pour que Java puisse récupérer ce que vous avez inscrit !
Alors ? Heureux ?
Voilà votre première saisie clavier ! Comme vous avez pu le constater, l'instruction
nextLine() renvoie une chaîne de caractères. Si vous avez essayé de remplacer la variable de type
String par une variable d'un autre type, vous avez dû voir qu'Eclipse n'apprécie pas du tout... Et si vous avez cliqué sur la croix rouge pour corriger le problème, vous constatez que la seule solution qu'il vous propose est de changer le type de votre variable pour le type String.
Vous aurez remarqué aussi qu'Eclipse vous simplifie la vie au maximum. Lorsque vous tapez "sc.", Eclipse vous propose une liste de méthodes appartenant à cet objet.
Si vous remplacez la ligne de code qui récupère une chaîne de caractères comme suit :
Code : Java | Scanner sc = new Scanner(System.in);
System.out.println("Veuillez saisir un nombre :");
int str = sc.nextInt();
System.out.println("Vous avez saisi le nombre : " + str);
|
vous devez voir que lorsque vous utilisez votre variable de type Scanner, et où vous tapez le point permettant d'appeler des méthodes de l'objet, Eclipse vous donne une liste de méthodes associées à cet objet et, 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 et vous verrez qu'il fonctionne à la perfection !
Sauf... si vous saisissez autre chose qu'un entier !
C'est ce que je vous disais au départ de ce chapitre. L'objet essaie de récupérer un entier, mais si vous lui donnez autre chose, une exception est levée ! Nous verrons ceci lorsque nous programmerons des objets...
Pour les curieux, voici ce que donnerait l'erreur :
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 !).
Bon. C'est mon jour de bonté :
Code : Java | Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
double d = sc.nextDouble();
long l = sc.nextLong();
byte b = sc.nextByte();
//etc
|
Attention : il y a un type de variable primitive qui n'est pas pris en compte par la classe Scanner ; il s'agit des variables de type char.
Voici comment on pourrait récupérer un caractère :
Code : Java | System.out.println("Saisissez une lettre :");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
char carac = str.charAt(0);
System.out.println("Vous avez saisi le caractère : " + carac);
|
Qu'est-ce que nous avons fait ici ?
Nous avons récupéré une chaîne de caractères, puis nous avons 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) ? Ne vous inquiétez pas, nous aborderons ce point lorsque nous verrons les tableaux...
Jusqu'à ce qu'on aborde les exceptions, je vous demande d'être rigoureux et de faire attention à ce que vous attendez comme donnée afin d'utiliser la bonne méthode.
Une précision toutefois. La méthode
nextLine()
récupère le contenu de toute la ligne saisie et repositionne 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 si vous invoquez directement derrière la méthode
nextLine()
, celle-ci ne vous invitera pas à saisir une chaîne de caractères mais elle videra la ligne commencée précédemment par les autres instructions car celles-ci ne repositionnent pas la tête de lecture, l'instruction
nextLine()
le fait donc à leurs place. Pour faire simple, ceci :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12 | import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Saisissez un entier : ");
int i = sc.nextInt();
System.out.println("Saisissez une chaîne : ");
String str = sc.nextLine();
System.out.println("FIN ! ");
}
}
|
ne vous demandera pas 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 :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Saisissez un entier : ");
int i = sc.nextInt();
System.out.println("Saisissez une chaîne : ");
//On vide la ligne avant d'en lire une autre
sc.nextLine();
String str = sc.nextLine();
System.out.println("FIN ! ");
}
}
|
Voilà : je pense que vous êtes fin prêts pour un QCM, maintenant !