1. Lecture depuis la console en utilisantSystem.in

Dans les leçons précédentes, nous nous sommes familiarisés avec les commandes d'affichage des informations à l'écran. Pour ce faire, nous avons utilisé l' System.outobjet et ses méthodes print()et println(). C'est simple et pratique.

Mais, comme vous l'avez probablement déjà deviné, afficher des informations à l'écran ne nous suffit pas. Le but de la plupart des programmes est de faire quelque chose d'utile pour l'utilisateur. Cela signifie qu'il est très souvent nécessaire que l'utilisateur puisse saisir des données au clavier.

Tout comme c'était le cas pour la sortie, nous avons également un objet spécial pour l'entrée de données — System.in. Mais, malheureusement pour nous, ce n'est pas aussi pratique que nous le souhaiterions. Il nous permet de lire les données du clavier un caractère à la fois.

Pour améliorer cela, nous utiliserons une autre classe qui, associée à l' System.inobjet, nous donnera tout ce dont nous avons besoin. Depuis longtemps, Java propose des cours adaptés à toutes les occasions. Et nous allons apprendre à connaître l'un d'eux maintenant.


2. Scannerclasse

La Scannerclasse (nom complet : java.util.Scanner) peut lire des données provenant de différentes sources, par exemple la console, des fichiers et Internet. Si nous voulons qu'il lise les données du clavier, nous devons passer l' System.inobjet en tant qu'argument qui servira de source de données. Et puis l'objet Scanner saura quoi en faire.

La lecture à partir du clavier à l'aide d'un Scannerobjet ressemblerait à ceci :

Code Explication
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Nous créons un Scannerobjet.
Nous lisons une ligne de texte au clavier.
Nous lisons un numéro sur le clavier.

Cela semble facile, mais est-ce vraiment si simple ?

Je pense que vous devez avoir un tas de questions, et maintenant nous allons y répondre.

Mais d'abord, montrons un exemple de programme complet qui utilise la Scannerclasse :

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      String name = console.nextLine();
      int age = console.nextInt();

      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

3. Créer un Scannerobjet

La première question est quelle est cette ligne Scanner console = new Scanner (System.in);?

Cette ligne peut prêter à confusion, mais vous verrez tout le temps des choses similaires. Nous pensons donc qu'il est important d'expliquer ce qui se passe ici.

Rappelez-vous comment nous créons habituellement une variable avec du texte :

String str = "text";
Déclarer et initialiser une variable chaîne

D'abord, nous écrivons le type de la variable ( String), puis son nom ( str), et enfin, après le signe égal, nous écrivons la valeur.

Notre ligne déroutante est en fait la même :

Scanner console = new Scanner(System.in);
Déclarer et initialiser une Scannervariable

Tout ce qui se trouve à gauche du signe égal est la déclaration d'une variable nommée consoledont le type est Scanner. Vous pouvez plutôt l'appeler s ou scannerou même keyboard. Ensuite, le code ressemblerait à ceci :

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

Je pense que tout est beaucoup plus clair.

Mais le code à droite du signe égal est un peu plus compliqué. Je fais maintenant référence à new Scanner(System.in); Cela dit, il ne se passe rien de surnaturel ici non plus.

Dans ce code, nous disons à la machine Java : créez un nouvel objet (le newmot-clé) dont le type est Scanner , en passant l' System.inobjet comme source de données pour l' Scannerobjet nouvellement créé.

Après avoir exécuté toute cette ligne, nous aurons une Scannervariable nommée console que notre programme utilisera pour lire les données du clavier.


4. Liste des méthodes

Dans l'exemple ci-dessus, notre Scanner consolevariable stocke une référence à un Scannerobjet.

Pour appeler des méthodes sur un objet référencé par une variable, vous écrivez un point après le nom de la variable, suivi du nom de la méthode et des arguments. L'aspect général de la commande est le suivant :

variable.method(arguments);
Appel d'une méthode sur un objet référencé par une variable

Exemples:

System.out.println("Hello");
System.out.println(1);

Si vous ne prévoyez pas de passer d'arguments à une fonction, écrivez simplement des parenthèses vides :

variable.method();
Appeler une méthode sans passer d'arguments

Exemple:

System.out.println();

5. Entrée console

Lorsque nous avons un Scannerobjet, il est facile d'obtenir des données à partir du clavier.

Pour lire une ligne au clavier , vous avez besoin de cette commande :

String str = console.nextLine();

Lorsque l'exécution du programme atteint cette ligne, il s'arrêtera et attendra que l'utilisateur entre des données et appuie sur Entrée. Ensuite, tout ce que l'utilisateur a saisi est stocké dans la variable str.

Pour lire un nombre au clavier , vous avez besoin de cette commande :

int number = console.nextInt();

Tout ici est comme la commande précédente. Lorsque l'exécution du programme atteint cette ligne, il s'arrêtera et attendra que l'utilisateur entre des données et appuie sur Entrée. Après cela, tout ce que l'utilisateur a saisi est converti en nombre et stocké dans la numbervariable.

Si l'utilisateur a entré des données qui ne peuvent pas être converties en nombre entier, le programme générera une erreur et quittera.

Pour lire un nombre fractionnaire depuis le clavier , vous avez besoin de cette commande :

double number = console.nextDouble();

Cette instruction est très similaire à celle de la nextInt()méthode, sauf qu'elle vérifie que les données saisies peuvent être converties en doublenombre.

Exemple de programme qui lit deux nombres au clavier et affiche leur somme à l'écran :

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      int a = console.nextInt();
      int b = console.nextInt();

      System.out.println(a + b);
   }
}
Note

L'utilisateur peut saisir plusieurs nombres sur une même ligne en les séparant par des espaces : les méthodes de la Scannerclasse savent le faire. Cela dit, le programme lit les chiffres uniquement après que l'utilisateur a appuyé sur Enter.



6. Autres méthodes de la Scannerclasse

Soit dit en passant, les méthodes ci-dessus ne sont pas tout ce que la Scannerclasse a à offrir. La liste complète des méthodes ressemble à ceci :

Méthode Description
nextByte()
Lit les données et les convertit en unbyte
nextShort()
Lit les données et les convertit en unshort
nextInt()
Lit les données et les convertit en unint
nextLong()
Lit les données et les convertit en unlong
nextFloat()
Lit les données et les convertit en unfloat
nextDouble()
Lit les données et les convertit en undouble
nextBoolean()
Lit les données et les convertit en unboolean
next()
Lit un "jeton". Les jetons sont séparés par des espaces ou des pressions sur la touche Entrée
nextLine()
Lit une ligne entière

Il existe également des méthodes qui vous permettent de vérifier le jeton suivant dans l'entrée sans réellement le récupérer (afin de savoir quelle méthode utiliser pour le lire).

Méthode Description
hasNextByte()
Y a-t-il un byte? L'entrée peut-elle être convertie en un byte?
hasNextShort()
Y a-t-il un short? L'entrée peut-elle être convertie en un short?
hasNextInt()
Y a-t-il un int? L'entrée peut-elle être convertie en un int?
hasNextLong()
Y a-t-il un long? L'entrée peut-elle être convertie en un long?
hasNextFloat()
Y a-t-il un float? L'entrée peut-elle être convertie en un float?
hasNextDouble()
Y a-t-il un double? L'entrée peut-elle être convertie en un double?
hasNextBoolean()
Y a-t-il un boolean? L'entrée peut-elle être convertie en un boolean?
hasNext()
Existe-t-il un autre jeton ?
hasNextLine()
Y a-t-il une autre ligne ?

7. Lire les données d'une chaîne

Nous avons mentionné précédemment que la Scannerclasse peut lire des données provenant de diverses sources. L'une de ces sources est une chaîne de texte .

Cela ressemble à ceci :

String str = "text";
Scanner scanner = new Scanner(str);

Lors de la création de l' Scannerobjet, nous transmettons la chaîne strau lieu de l' System.inobjet. Et maintenant, l' scannerobjet lira les données de la chaîne. Exemple:

Code programme : Explication:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}




// un == 10 ; 
// b == 20; 
La sortie d'écran sera :30