Keyboard shortcuts

Touchez ← ou → pour naviguer les chapitres

Touchez S ou / pour chercher dans le livre

Touchez ? pour afficher ce message

Touchez Esc pour masquer ce message

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.out qui 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, %s pour une valeur de type String, %d pour une valeur de type int et %f pour une valeur de type double.

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 un String. L’autre opĂ©rande sera converti automatiquement en String pour l’opĂ©ration. La concatĂ©nation se propage de gauche Ă  droite, alors l’expression "a" + 1 + 2 donne "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 printf et ses arguments
  • ReconnaĂźtre les drapeaux de formatage les plus communs pour la mĂ©thode printf, notamment %d, %f et %s.

CritĂšres de succĂšs

  • Je peux utiliser la mĂ©thode printf pour 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 : %s pour une valeur de type String et %d pour une valeur de type int.
    • Il y a aussi le caractĂšre d’échappement pour le retour de ligne, \n, parce que printf ne l’inclut pas; c’est comme print.
  • 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 :

DrapeauType de valeurExemple
%sString"Bonjour %s"
%SString en majuscules"Bonjour %S"
%dint en décimal"La valeur du rouge est %d"
%xint en hexadécimal"La valeur du rouge est #%x"
%fdouble"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 :

DrapeauExempleSortie
%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Ă© -10 pour spĂ©cifier une largeur de 10 caractĂšres et un alignement Ă  gauche.
  • on a ajoutĂ© 10 pour spĂ©cifier une largeur de 10 caractĂšres avec l’alignement par dĂ©faut (Ă  droite).
  • comme avec les valeurs dĂ©cimales, on peut remplacer 10 par 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 :

DrapeauExempleEffet
%-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

  1. Créez le fichier Print2.java et y ajouter la structure de base (méthode main).
  2. Dans la méthode main, reproduire les trois instructions printf ci-dessus pour produire un tableau formaté pour les noms et les ùges.
  3. 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.
  4. 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.
  5. 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.

© 2022-2025 David Crowley