Accueil > Programmer avec Java > Les bases de Java >
Afficher des messages Ă la console - partie 2
Survol et attentes
Parfois on a besoin de plus de contrĂŽle sur le format de messages ou simplement une façon plus efficace dâafficher plusieurs informations Ă la console. Cette leçon vous montre comment utiliser la mĂ©thode printf pour afficher des messages formatĂ©s en Java.
Définitions
- printf()
-
mĂ©thode de lâobjet
System.outqui affiche un message formatĂ©. Il prend un nombre variable dâarguments : le premier est le message formatĂ©, les autres sont les valeurs Ă insĂ©rer dans le message :System.out.printf("message avec drapeaux pour les valeurs", valeur1, valeur2, ...); - drapeaux de formatage
-
caractÚres spéciaux dans un message formaté qui gardent une place pour une valeur de type spécifique. Par exemple,
%spour une valeur de typeString,%dpour une valeur de typeintet%fpour une valeur de typedouble. - concaténation
-
coller du texte ensemble. En Java, lâopĂ©rateur
+agit comme opĂ©rateur de concatĂ©nation si au moins un des opĂ©randes est unString. Lâautre opĂ©rande sera converti automatiquement enStringpour lâopĂ©ration. La concatĂ©nation se propage de gauche Ă droite, alors lâexpression"a" + 1 + 2donne"a12"; pour obtenir"a3", il faut utiliser des parenthĂšses autour de lâaddition :"a" + (1 + 2).
Objectifs dâapprentissage
Ă la fin de cette leçon vous devrez ĂȘtre en mesure de :
- Comprendre la méthode
printfet ses arguments - Reconnaßtre les drapeaux de formatage les plus communs pour la méthode
printf, notamment%d,%fet%s.
CritĂšres de succĂšs
- Je peux utiliser la méthode
printfpour afficher des données efficacement à la console.
Messages formatés : printf
Vous pouvez utiliser la mĂ©thode printf() pour afficher des messages formatĂ©s. Câest utile quand vous :
- essayez de coller plusieurs valeurs ensemble dans une phrase.
- voulez contrÎler le nombre de chiffres aprÚs la virgule pour un nombre décimal.
- voulez afficher des valeurs en colonnes de largeur fixe.
Vous verrez que pour la plupart des situations, vous pouvez utiliser des print, des println et de la concatĂ©nation pour afficher ces messages au lieu dâutiliser printf : dans ces cas, câest une prĂ©fĂ©rence personnelle. Par contre, pour lâaffichage uniforme des valeurs dĂ©cimales ou pour lâalignement du texte, printf est la seule solution raisonnable.
Exemple - Coller des valeurs dans une phrase
Reproduire cet exemple dans un fichier nommé PrintGlue.java et tester la sortie.
Rappel : câest toujours mieux de taper les exemples vous-mĂȘme (et dĂ©couvrir ce que vos outils vous aident Ă complĂ©ter, oĂč se trouvent les symboles sur le clavier, etc.) que de copier-coller lâexemple. Vous gagnerez plus de confiance avec votre capacitĂ© Ă produire du code. Câest la diffĂ©rence entre CRĂER (taper) et UTILISER (copier-coller) du code, mĂȘme si le code final est le mĂȘme.
void main() {
String name = "Malcolm";
int age = 16;
// AVEC PLUSIEURS PRINT ET PRINTLN (sans concaténation des valeurs)
System.out.print("Mon nom est ");
System.out.print(name);
System.out.print(" et j'ai ");
System.out.print(age);
System.out.println(" ans.");
// AVEC PRINTLN (et concaténation des valeurs)
System.out.println("Mon nom est " + name + " et j'ai " + age + " ans.");
// AVEC PRINTF
System.out.printf("Mon nom est %s et j'ai %d ans.\n", name, age);
}
et la sortie identique pour les trois approches :
Mon nom est Malcolm et j'ai 16 ans.
Mon nom est Malcolm et j'ai 16 ans.
Mon nom est Malcolm et j'ai 16 ans.
Structure de la méthode printf
La mĂ©thode printf accepte un nombre variable dâarguments. Le premier argument est toujours le String qui dĂ©finit le format du message Ă afficher, incluant le texte de base et des drapeaux de formatage pour les valeurs Ă insĂ©rer dans le message. Les prochains arguments sont les valeurs Ă insĂ©rer dans le message, remplaçant chaque drapeau.
System.out.printf("message avec drapeaux pour les valeurs", valeur1, valeur2, ...);
Dans dans lâexemple System.out.printf("Mon nom est %s et j'ai %d ans.\n", name, age); :
- Le String de formatage est
"Mon nom est %s et j'ai %d ans.\n".- il y a deux drapeaux de formatage :
%spour une valeur de typeStringet%dpour une valeur de typeint. - Il y a aussi le caractĂšre dâĂ©chappement pour le retour de ligne,
\n, parce queprintfne lâinclut pas; câest commeprint.
- il y a deux drapeaux de formatage :
- Le prochain argument est
name(de type String qui sâĂ©value Ă âMalcolmâ). Sa valeur remplacera le%s, le premier drapeau de formatage. - Le dernier argument est
age(de type int qui sâĂ©value Ă 16). Sa valeur remplacera le%d, soit le dernier drapeau de formatage.
Voici un tableau de quelques drapeaux de formatage communs :
| Drapeau | Type de valeur | Exemple |
|---|---|---|
%s | String | "Bonjour %s" |
%S | String en majuscules | "Bonjour %S" |
%d | int en décimal | "La valeur du rouge est %d" |
%x | int en hexadécimal | "La valeur du rouge est #%x" |
%f | double | "Le prix est de %f" |
Exemple - ContrÎler le nombre de chiffres aprÚs la virgule pour un nombre décimal
Voici quelques exemples que vous pouvez tester dans une session jshell. Lancez la commande jshell dans un terminal pour ouvrir une session jshell. Quittez la sesssion avec la commande \exit.
double PI = 3.141592653589793; // constante pour la valeur de pi
System.out.printf("La valeur de pi est %f.\n", PI);
System.out.printf("La valeur de pi est %.2f.\n", PI);
sortie :
La valeur de pi est 3.141593.
La valeur de pi est 3.14.
Comme le premier exemple, le premier argument est le String qui définit le format du message. Dans ce cas on utilise le drapeau %f pour une valeur de type double. La valeur à insérer est 3.141592653589793. Par défaut, printf affiche 6 chiffres aprÚs la virgule pour les nombres décimaux. Pour contrÎler le nombre de chiffres aprÚs la virgule, on peut ajouter un point et un nombre entre le % et le f.
Dans le deuxiĂšme exemple, on a ajoutĂ© .2 pour afficher seulement 2 chiffres aprĂšs la virgule. Le .2 est un Ă©lĂ©ment optionnel dans le drapeau de formatage pour les valeurs dĂ©cimales. On peut remplacer 2 par nâimporte quel nombre pour afficher ce nombre de chiffres aprĂšs la virgule.
Voici un tableau présentant quelques options pour le formatage des valeurs décimales :
| Drapeau | Exemple | Sortie |
|---|---|---|
%f | "La valeur de pi est %f" | 3.141593 |
%.2f | "La valeur de pi est %.2f" | 3.14 |
%.0f | "La valeur de pi est %.0f" | 3 |
Exemple - Afficher des colonnes de valeurs alignées
// Afficher des valeurs en colonnes de largeur fixe
System.out.printf("%-10s %10s\n", "NOM", "ĂGE"); // en-tĂȘtes
System.out.printf("%-10s %10d\n", "Malcolm", 16);
System.out.printf("%-10s %10d\n", "Myriam", 17);
sortie :
NOM ĂGE
Malcolm 16
Myriam 17
Ici on a plusieurs instructions printf, une pour chaque ligne dâun tableau. La premiĂšre instruction donne les en-tĂȘtes, donc les drapeaux de formatage dans le premier argument sont %s pour une valeur de type String. Pour spĂ©cifier la largeur de colonne, on peut ajouter des Ă©lĂ©ments optionnels entre % et le s. Dans ce cas :
- on a ajouté
-10pour spécifier une largeur de 10 caractÚres et un alignement à gauche. - on a ajouté
10pour spĂ©cifier une largeur de 10 caractĂšres avec lâalignement par dĂ©faut (Ă droite). - comme avec les valeurs dĂ©cimales, on peut remplacer
10par nâimporte quel nombre pour spĂ©cifier la largeur de colonne voulue. - Notez que les valeurs substituĂ©es seront tronquĂ©es (coupĂ©es) si elles sont plus longues que la largeur de colonne spĂ©cifiĂ©e. Soit, le format spĂ©cifiĂ© est respectĂ© mĂȘme sâil faut couper le texte pour le faire.
Les arguments suivants sont les valeurs Ă insĂ©rer dans le message, dans lâordre oĂč ils apparaissent dans le message. Donc "NOM" est insĂ©rĂ© Ă la place de %-10s et "ĂGE" est insĂ©rĂ© Ă la place de %10s.
Pour les lignes suivantes, les valeurs pour âĂgeâ sont de type int, alors on utilise le drapeau %d au lieu de %s, mais on maintient les mĂȘmes spĂ©cifications pour la largeur et lâalignement, donc %10d au lieu de %10s. Les valeurs Ă insĂ©rer sont 16 pour la premiĂšre ligne et 17 pour la deuxiĂšme.
Voici un tableau présentant quelques options pour le formatage des colonnes :
| Drapeau | Exemple | Effet |
|---|---|---|
%-10s | "Le nom est %-10s" | colonne de 10 char de large, aligné à gauche |
%10d | "L'ùge est %10d" | colonne de 10 char de large, aligné à droite |
%-10.2f | "Le prix est %-10.2f" | colonne de 10 char de large, aligné à gauche avec 2 places aprÚs la virgule |
Exercices
đ Tester la comprĂ©hension
Quiz quiz de vérification sur printf
đ ïž Pratique
Travaillez dans le répertoire GitHub partagé par votre enseignant pour la pratique et les exercices
- Créez le fichier
Print2.javaet y ajouter la structure de base (méthodemain). - Dans la méthode
main, reproduire les trois instructionsprintfci-dessus pour produire un tableau formaté pour les noms et les ùges. - Changez la largeur de colonne pour les noms à 5 caractÚres.
- Lancez le programme et notez ce qui se passe Ă la sortie.
- Ăcrire un commentaire de bloc pour consigner vos observations.
- Changez la colonne âĂGEâ Ă une colonne âMOYENNEâ.
- Ajouter des valeurs décimales raisonnables pour les moyennes de Malcolm et de Myriam et ajuster les drapeaux de formatage de façon appropriée.
- Lancez le programme et vĂ©rifiez quâil fonctionne.
- Ajustez le drapeau de formatage pour les valeurs décimales pour afficher seulement 1 chiffre aprÚs la virgule. Lancez le programme de nouveau pour vérifier que ça fonctionne.
- Prenez une capture dâĂ©cran du terminal incluant les commandes pour lancer le programme et la sortie complĂšte. Nommez la capture â4-1-5-print.pngâ et ajoutez-la au dossier âcapturesâ de votre projet.