Vous êtes sur la page 1sur 5

26/12/2023 08:01 Débutant Java : La fonction System.in.read() : Siasir une information au clavier.

← (précédent) A.2 Les variables (1) : les types primitifs - les constantes

CWS Secure solutions


SEE MORE
Secure Your Business In Cloud
A.4 Les variables (2) : opérateurs et opérations. →

Accueil ↔ S O M M A I R E

A.3 La fonction System.in.read

En Java, il existe des fonctions prédéfinies de lecture. Mais elles sont délicates à manipuler pour un débutant. La plus
simple d' entre elles s' appelle System.in.read(); Malheureusement, cette fonction permet de saisir un seul caractère.
Sans trop entrer dans les détails, sachez que les choses ne sont jamais simples lorsqu' il s' agit de saisir une donnée au
clavier. Ce n' est pas comme le fait d' afficher avec System.out.print().
La voie la plus simple, c' est de créer ses propres fonctions de lecture à partir de System.in.read() ou à partir de toute
autre fonction prédéfinie de lecture. Seulement, pour un débutant, c' est mission impossible. Il faut assimiler un certain
nombres de notions et pour l' instant, nous en sommes loin. Pour cette raison, les auteurs de livre sur Java fournissent
dans un cd-rom, des fonctions de lecture. J' ai donc fourni dans l' exemple zéro ci-dessous, les fonctions de l' un de ces
auteurs. Ces fonctions sont regroupées dans une classe appelée Lire. Enregistrez cette classe sous l' extension Lire.java
dans le même repertoire que les programmes que vous testez.
Vous pouvez faire du copier-coller.

EXEMPLE Zéro

import java.io.*;

public class Lire


{
// Cette fonction permet de saisir au clavier une variable de type String
public static String chaine()
{
String tmp = "";
char C='\0';
try
{
while ((C=(char) System.in.read()) !='\n')
{
if (C != '\r') tmp = tmp+C;

}
}
catch (IOException e)
{
System.out.println("Erreur de frappe");
System.exit(0);
}
return tmp;
}

// Cette fonction permet de saisir au clavier une variable entière de type byte
public static byte entierByte()
{
www.neophytes.info/java/a3.html 1/5
26/12/2023 08:01 Débutant Java : La fonction System.in.read() : Siasir une information au clavier.
byte x=0;
try
{
x = Byte.parseByte(chaine());
}
catch (NumberFormatException e)
{
System.out.println("Format numérique incorrect");
System.exit(0);
}
return x ;
}

// Cette fonction permet de saisir au clavier une variable entière de type Short
public static short entierShort()
{
short x=0;
try
{
x=Short.parseShort(chaine());
}
catch (NumberFormatException e)
{
System.out.println("Format numérique incorrect");
System.exit(0);
}
return x ;
}

// Cette fonction permet de saisir au clavier une variable entière de type int
public static int entierInt()
{
int x=0;
try
{
x=Integer.parseInt(chaine());
}
catch (NumberFormatException e)
{
System.out.println("Format numérique incorrect");
System.exit(0);
}
return x ;
}

// Cette fonction permet de saisir au clavier une variable entière de type long
public static long entierLong()
{
long x=0;
try
{
x=Integer.parseInt(chaine());
}
catch (NumberFormatException e)
{
System.out.println("Format numérique incorrect");
System.exit(0);
}
return x ;
}

// Cette fonction permet de saisir au clavier une variable réelle double


public static double reelDouble()
{
double x=0.0;
try
{
x=Double.valueOf(chaine()).doubleValue();
}
catch (NumberFormatException e)
{
System.out.println("Format numérique incorrect");
System.exit(0);
}
return x ;
}

// Cette fonction permet de saisir au clavier une variable réelle float

www.neophytes.info/java/a3.html 2/5
26/12/2023 08:01 Débutant Java : La fonction System.in.read() : Siasir une information au clavier.
public static float reelFloat()
{
float x=0.0f;
try
{
x=Double.valueOf(chaine()).floatValue();
}
catch (NumberFormatException e)
{
System.out.println("Format numérique incorrect");
System.exit(0);
}
return x ;
}

// Cette fonction permet de saisir au clavier une variable de type char


public static char caractere()
{
String tmp=chaine();
if (tmp.length()==0)
{
return '\n';
}
else
{
return tmp.charAt(0);
}
}
}

Commencez par remarquer l' aération du code. Les accolades appartenant au même couple sont sur la même verticale.
Les verticales des accolades conteneurs et accolades contenus sont décalées par une marge. Les instructions d' un
même contenu commencent toujours sur la même verticale. Que c' est agréable de voir ça.

La classe Lire ci-dessus contient des fonctions de lecture au clavier. Ce ne sont pas des fonctions prédéfinies comme la
fonction System.out.print(). Ces fonctions, et donc la classe qui les contient, ont été définies par un auteur de livres sur
Java. J' ai juste changé le nom des fonctions.
Ces fonctions sont déclarées à chaque fois sous une phrase précédé de //

Le double slash (//) est utilisé en JAVA pour des commentaires sur une ligne. Si vous voulez mettre des commentaires
sur plusieurs lignes, vous utiliserez le /* en début de la première ligne et le */ en fin de dernière ligne.

Exemple : // Voici un commentaire sur une seule ligne


/* En voilà un autre
sur deux lignes * /
Ces caractères (// et /* ... */) permettent au compilateur JAVA de considérer ce qui suit (//) ou ce qui s' y trouve (/* */)
est un commentaire. Sinon, cela sera considéré comme du code. Et comme ça ne ressemble pas du tout à un code
JAVA, un message d' erreur serait renvoyé. Les commentaires sont indispensables en Java comme en tout langage de
programmation. ELles permettent de trouver plus facilement ce qu' on cherche à corriger ou à modifier sur un
programme.

Revenons aux fonctions de lecture de la classe Lire ci-dessus. Je disais donc que chacune de ces fonctions est définie
juste en dessous d' un commentaire qui précisément indique ce que fait la fonction.
la fonction chaine() permet de lire une variable de type String. Les autres fonction sont : entierByte(), entierShort(),
entierInt(), entierLong(), reelDouble(), reelFloat() et caractère() dont l' action est définie par le caractère commenté au-
dessus de leur définition.

Comment utilise-t-on ces fonctions ? Des exemples bien sûr !

EXEMPLE 1 :

1. public class Lecture1


2. {
3.

www.neophytes.info/java/a3.html 3/5
26/12/2023 08:01 Débutant Java : La fonction System.in.read() : Siasir une information au clavier.
4. public static void main (String [] args)
5. {
6. System.out.println("Entrez un nombre entier de type byte (entre -128 et +127) : ");
7. byte age = Lire.entierByte();
8. System.out.println("Vous avez saisi le nombre " + age);
9. }
10. }

compilez puis exécutez ce programme. Il sera affiché :


Entrez un nombre entier de type byte (entre -128 et +127) :
Puis le curseur se met à clignoter sur la ligne suivante. Le programme attend alors que l' utilisateur entre un nombre. Si
vous saisissez par exemple le nombre 40, puis vous appuyez sur la touche entrée, alors il s' affiche :
Vous avez saisi le nombre 40
La fonction System.out.println(), vous le savez déjà, vous permet d' afficher ce qui se trouve entre parenthèses. Elle
affiche exactement si ce qui se trouve entre parenthèses se trouve aussi entre doubles crochets. Elle affiche le contenu
de la variable dont le nom n' est pas entre doubles crochets. Ici, cette variable est age.Son contenu, c' est justement la
saisie que vous aurez effectuée. L' instruction byte age = Lire.entierByte(); signifie que je déclare une variable dont le
nom est age, de type byte. Puis je l' affecte d' une valeur égale à la saisie. Parce que Lire.entierByte() est une fonction
de lecture.

De manière générale, l' instruction type variable = fonction de lecture(); signifie que le programme s' arrête, attend que
l' utilisateur saisisse une variable au clavier. Lorsque l' utilisateur appuie alors sur la touche d' entrée, aussitôt, la valeur
saisie est affectée à la variable.

EXEMPLE 2 :

1. public class Lecture2


2. {
3.
4. public static void main (String [] args)
5. {
6. System.out.println("Entrez un nombre entier de type byte (entre -128 et +127) : ");
7. byte age = Lire.entierByte();
8. System.out.println("Vous avez saisi le nombre " + age);
9. System.out.println();
10. System.out.println("Entrez un nombre entier de type short : ");
11. short nombreEtudiants = Lire.entierShort();
12. System.out.println("Vous avez saisi le nombre " + nombreEtudiants);
13. System.out.println();
14. System.out.println("Entrez un nombre entier de type int : ");
15. int populationFrance = Lire.entierInt();
16. System.out.println("Vous avez saisi le nombre " + populationFrance);
17. System.out.println();
18. System.out.println("Entrez un nombre de type long : ");
19. long distanceExoPlanete = Lire.entierLong();
20. System.out.println("Vous avez saisi le nombre " + distanceExoPlanete);
21. System.out.println();
22. System.out.println("Entrez un nombre de type float : ");
23. float tva = Lire.reelFloat();
24. System.out.println("Vous avez saisi le nombre " + tva);
25. System.out.println();
26. System.out.println("Entrez un nombre de type double : ");
27. double tauxLivret = Lire.reelDouble();
28. System.out.println("Vous avez saisi le nombre " + tauxLivret);
29. System.out.println();
30. System.out.println("Saisissez un caract\u00e8re et un seul: ");
31. char caract = Lire.caractere();
32. System.out.println("Vous avez saisi le caract\u00e8re " + caract);
33. System.out.println();
30. System.out.println("Saisissez une chaine de caract\u00e8res: ");
31. String ch = Lire.chaine();
32. System.out.println("Vous avez saisi la chaine de caract\u00e8res " + ch);
33. System.out.println();
35.
36. }
37. }

www.neophytes.info/java/a3.html 4/5
26/12/2023 08:01 Débutant Java : La fonction System.in.read() : Siasir une information au clavier.

Utilisation des fonctions !

En programmation structurée, il existe deux façons d' utiliser une fonction :

Si on utilise la fonction dans la même classe où on l' a définit, on écrit simplement le nom de fonction suivi de ses
parenthèses. Eventuellement les paramètres à l' intérieur des parenthèses.
Exemple : regardez la définition de la deuxième fonction de la classe Lire. C' est la fonction entierByte(). A l' intérieur
de cette fonction, on utilise la première fonction, la fonction chaine(). Sur la ligne où est écrite l' instruction : x =
Byte.parseByte(chaine());
Si on utilise une fonction dans une classe différente de celle dans laquelle est elle est définie, on écrit le nom de la
classe, suivie d' un point, lui même suivi du nom de la fonction. Dans les exemples 1 et 2, nous avons défini les classes
Lecture1 et Lecture2. Dans ces classes , nous avons utilisé les fonctions chaine(), entierByte(), entierShort(),
entierInt(), entierLong(), reelFloat(), reelDouble() et caractere(). C' est pourquoi on a précisé le nom de leur classe afin
que le compilateur Java puisse aller chercher ces fonctions dans la classe correpondante. C' est pourquoi on a écrit
Lire.entierByte(), Lire.entierShort(), Lire.entierInt(), Lire.entierLong(), Lire.reelFloat(), Lire.reelDouble(),
Lire.caractere(), Lire.chaine().

De même, la fonction System.out.print() est en réalité la fonction print() définie dans la classe System. Evidement,
vous ne pouvez pas voir le code de cette classe. Car cette classe est prédéfinie par le langage Java.

La question légitime que vous vous êtes déjà posée est de savoir ce que vient faire out entre System et print. C' est la
même question que vous vous poserez à savoir ce que vient faire in entre System et read. Puisque la fonction read() est
définie dans la classe System.
L' explication pour l' instant n' est pas indispensable. Plus tard !
Sachez simplement que out et in représentent ce qu' on appelle en java, un flux de sortie (out) et un flux d' entrée (in).

Sur l' EXEMPLE 2 :Les lignes 6, 7 et 8 sont exactement celles de l' exemple 1. Même explication donc. Ensuite, nous
avons à la ligne 8, l' instruction System.out.println(); Ici, rien dans les parenthèses de la fonctionSystem.out.println().
Ça veut dire que rien ne s' affichera. Et le curseur se placera quand même à la ligne suivante à cause de ln à la fin de
print. Cette instruction permet seulement d' afficher une ligne vide pour séparer des paragraphes par exemple.
Pour les 4 lignes suivantes, même explication. Avec une différence : le type de variable change. Ainsi de suite jusqu' au
bout.

Si vous essayez de mettre une valeur de type différent que la variable, il est possible que ça ne marche pas. Dans
certains cas, ça marchera. Par exemple : On peut mettre une valeur type byte dans une variable de type short. Mais pas
l' inverse. Pourquoi ? ... On le verra plus en détail au prochain paragraphe (1.4 opérateurs et opérations sur les
variables).

← (précédent) A.2 Les variables (1) : les types primitifs - les constantes

A.4 Les variables (2) : opérateurs et opérations. →

Accueil ↔ S O M M A I R E

A.3 La fonction System.in.read

www.neophytes.info/java/a3.html 5/5

Vous aimerez peut-être aussi