Premiers programmes Java
DébutantUnité 1 sur 11 de la formation Formation : Java orienté objet : classes, collections, héritage et tests
Ce que tu vas apprendre
- Construis un programme Java complet autour d’une méthode main, compile-le et lance-le, corrige les erreurs qui l’arrêtent et affiche le texte exactement comme prévu.
- Construis un programme autour de la méthode mainReconnais les parties d’un programme Java minimal, place correctement les instructions dans la méthode main et respecte les règles concernant les noms, les accolades, les points-virgules et les commentaires.
- Compile, exécute et corrige les erreursTransforme le code source en programme exécutable avec le JDK et distingue les erreurs de compilation, d’exécution et de logique pour pouvoir les trouver et les corriger.
- Affiche du texte avec print et printlnAffiche du texte et des valeurs à l’écran ligne par ligne, contrôle les retours à la ligne et utilise des séquences d’échappement pour les guillemets, les tabulations et les barres obliques inverses.
- Construis un programme autour de la méthode main
- Déclare et mets à jour des variables, choisis un type primitif adapté à chaque valeur, puis stocke et combine du texte dans des valeurs String.
- Déclare des variables, affecte-leur des valeurs et mets-les à jourCrée des variables avec un type et un nom, donne-leur des valeurs, respecte les règles de nommage et prévois la valeur de chaque variable au cours de l’exécution d’un programme.
- Choisis un type primitif et écris des littérauxChoisis le type primitif adapté aux nombres entiers, aux nombres décimaux, aux caractères et aux valeurs de vérité, écris des littéraux de chaque type et reconnais quand une valeur ne tient pas dans son type.
- Stocke du texte et assemble-le par concaténationStocke du texte dans des variables String et construis une sortie en assemblant des chaînes, des nombres et des variables avec l’opérateur +, en prévoyant exactement ce qui sera affiché.
- Déclare des variables, affecte-leur des valeurs et mets-les à jour
- Écris des expressions arithmétiques que Java évalue dans l’ordre voulu, utilise correctement la division entière et le reste, et effectue des calculs avec des nombres décimaux et la classe Math.
- Écris des expressions en respectant la priorité des opérateursCombine des valeurs avec les opérateurs arithmétiques, prévois l’ordre dans lequel Java les évalue et mets à jour des variables par affectation composée et incrémentation.
- Utilise la division entière et le restePrévois les résultats de / et % sur des nombres entiers, utilise ces opérateurs pour répartir des quantités en unités et reconnais une division par zéro.
- Effectue des calculs avec des nombres décimaux et la classe MathCalcule avec des valeurs double, utilise les méthodes prêtes à l’emploi de la classe Math pour les racines, les puissances et l’arrondi, puis présente les résultats avec un nombre raisonnable de décimales.
- Écris des expressions en respectant la priorité des opérateurs
- Prévois les conversions que Java effectue automatiquement, écris des transtypages lorsqu’une conversion peut entraîner une perte d’information, et convertis du texte en nombres et des nombres en texte.
- Effectue des conversions élargissantes et des transtypages explicitesDistingue les conversions élargissantes automatiques des conversions réductrices qui nécessitent un transtypage, place les transtypages pour obtenir le résultat voulu et prévois leur effet sur une valeur.
- Convertis du texte en nombres et des nombres en texteConvertis des chaînes contenant des nombres en valeurs int et double, convertis des nombres en chaînes et reconnais l’erreur que Java produit pour un texte qui n’est pas un nombre valide.
- Effectue des conversions élargissantes et des transtypages explicites
- Lis du texte et des nombres saisis par l’utilisateur, présente les résultats dans un format clair et combine entrée, calcul et sortie dans de petits programmes testés.
- Lis des données en entrée avec ScannerCrée un Scanner pour les entrées au clavier, lis des lignes, des mots et des nombres avec la méthode adaptée et évite les pièges courants liés aux fins de ligne, aux entrées incorrectes et aux séparateurs décimaux.
- Formate la sortie avec printfAffiche des nombres avec un nombre fixe de décimales et aligne la sortie en colonnes avec printf et String.format ; comprends comment les paramètres de l’ordinateur modifient le séparateur décimal.
- Combine la lecture des données, les calculs et l’affichage des résultatsPlanifie, écris et teste des programmes complets qui lisent des valeurs, effectuent des calculs avec les types appropriés et affichent des résultats clairs.
- Lis des données en entrée avec Scanner
Premiers programmes Java : cours
1Écris, compile et exécute un programme Java
Un programme Java commence sous forme de texte, mais l’ordinateur a besoin d’une structure précise avant de pouvoir exécuter ce texte comme une suite d’instructions. Construis une petite classe autour d’une méthode main, puis suis le code source pendant sa compilation et son exécution. Les messages affichés rendent chaque étape visible. Lorsqu’un problème survient, l’étape où il se produit t’indique s’il faut examiner le code source, lire une exception d’exécution ou comparer le résultat à celui que tu attendais.
1.1 Construis un programme autour de la méthode main
Un premier programme Java donne à l’ordinateur une courte liste d’instructions. La classe qui les contient et la méthode main indiquent à Java où placer ces instructions et où commence l’exécution.
Place les instructions dans main
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Les accolades extérieures délimitent le corps de la classe. Les accolades intérieures délimitent le corps de la méthode. Au démarrage de ce programme, Java exécute la première instruction à l’intérieur de main. Les autres instructions placées en dessous s’exécutent de haut en bas. Lorsque main s’achève, ce petit programme se termine.
Recopie soigneusement public static void main(String[] args). Ici, public permet au lanceur d’appeler la méthode, static permet son exécution sans créer d’objet au préalable et void indique que la méthode ne renvoie aucun résultat. String[] args reçoit les mots saisis sur la ligne de commande après le nom du programme. Tu peux afficher un message sans utiliser ces mots.
Fais correspondre la ponctuation et les noms
Une instruction comme System.out.println("Hi"); se termine par un point-virgule. Une accolade ouvrante { a besoin d’une accolade fermante }. Les en-têtes de classe et de méthode ci-dessus ouvrent des blocs ; ne remplace pas ces accolades ouvrantes par des points-virgules. Indenter l’instruction de quatre espaces supplémentaires par rapport à l’en-tête de sa méthode rend l’imbrication visible.
Enregistre public class Hello dans Hello.java. Le nom de la classe publique et la partie précédant .java doivent correspondre exactement, majuscules comprises. Si la déclaration indique public class Other, le fichier doit être Other.java. Un message du compilateur indiquant que la classe doit être déclarée dans un autre fichier signale cette absence de correspondance.
Java est sensible à la casse. Le nom System doit commencer par un S majuscule ; system.out.println("Hi"); ne compile pas. Une méthode appelée Main est différente de main. Une classe qui ne contient que Main peut compiler, mais le lanceur ne trouve pas la méthode d’entrée attendue lorsque tu l’exécutes.
Rends le code lisible
Utilise une instruction par ligne et quatre espaces d’indentation pour chaque niveau d’accolades. La plupart des espaces et des retours à la ligne entre les éléments du code n’ont aucun effet sur la compilation. Les espaces à l’intérieur du texte entre guillemets modifient en revanche la sortie. Les noms de classes s’écrivent par convention en PascalCase, comme TravelTime.
Un commentaire explique le code aux personnes qui le lisent. Java ignore tout ce qui suit // sur cette ligne. Un commentaire de bloc commence par /* et se termine par */ ; il peut s’étendre sur plusieurs lignes. Un commentaire utile explique une raison, comme // Convert hours to seconds, à côté d’une conversion dont le but pourrait être obscur.
Reconnais la forme plus courte
Java 25 et les versions ultérieures prennent aussi en charge un fichier source compact :
void main() {
IO.println("Hello, world!");
}
Cette forme omet la déclaration explicite de classe. IO.println affiche une ligne et IO.readln("Your name: ") affiche une invite et renvoie la ligne saisie. La forme classique avec une classe fonctionne aussi avec les versions antérieures de Java ; les deux formes fournissent une méthode main où l’exécution commence.
Points clés
- Place les instructions exécutables dans la méthode main et associe chaque accolade ouvrante à une accolade fermante.
- Termine une instruction comme un appel d’affichage par un point-virgule.
- La classe publique
Hellova dansHello.java; les majuscules et les minuscules comptent. - Les commentaires expliquent le code aux lecteurs et sont ignorés lors de la compilation.
- Java 25 ajoute une forme source compacte ; la forme classique avec une classe fonctionne aussi dans les versions antérieures.
1.2 Compile, exécute et corrige les erreurs
Écrire le code source et exécuter un programme sont deux étapes distinctes. Java vérifie et traduit d’abord ton code, puis l’exécute. Savoir quelle étape a échoué t’aide à choisir où chercher.
Compile le code source, puis lance la classe
Le code source est le texte d’un fichier .java. Le compilateur, javac, traduit un code source valide en bytecode dans un fichier .class. La machine virtuelle Java (JVM) exécute ce bytecode. Une JVM adaptée permet d’exécuter le même bytecode sur différents systèmes d’exploitation.
Ouvre un terminal dans le dossier contenant Hello.java et saisis :
javac Hello.java
java Hello
La première commande crée Hello.class lorsque la compilation réussit. La seconde démarre le programme. Son argument est le nom de la classe, sans .class : java Hello.class demande au lanceur de chercher un nom de classe incorrect et échoue.
Le JDK, ou Java Development Kit, fournit les deux commandes. Un environnement de développement intégré, comme IntelliJ IDEA, Eclipse, NetBeans ou Visual Studio Code avec prise en charge de Java, effectue la compilation et le lancement lorsque tu appuies sur le bouton d’exécution. Il peut signaler des erreurs pendant la saisie, mais ce sont toujours des erreurs du même langage Java.
Depuis Java 11, le mode fichier source offre un raccourci pour un petit programme contenu dans un seul fichier :
java Hello.java
Cette commande compile en mémoire et exécute le code source sans laisser de fichier .class. Distingue les deux formes : java Hello lance une classe compilée, tandis que java Hello.java lance le code source.
Lis les erreurs de compilation
Une erreur de compilation empêche la compilation de réussir. Par exemple, un point-virgule manquant peut produire :
Hello.java:3: error: ';' expected
System.out.println("Hello")
^
Le message indique le fichier, la ligne et l’endroit où le compilateur a remarqué le problème. La véritable erreur peut se trouver avant : un guillemet non fermé sur une ligne peut perturber les lignes suivantes. Lis la ligne indiquée et celle qui la précède. Corrige la première erreur signalée et recompile avant de modifier plusieurs autres lignes. Une seule correction peut faire disparaître de nombreux messages ultérieurs.
Distingue les erreurs d’exécution des résultats incorrects
| Type de problème | Ce qui se passe | Comment chercher |
|---|---|---|
| Erreur de compilation | Le code source ne peut pas être compilé correctement. | Lis le premier message du compilateur et examine le code à proximité. |
| Erreur d’exécution | L’exécution s’arrête avec une exception. | Lis l’exception et repère la ligne indiquée. |
| Erreur de logique | L’exécution se termine, mais le résultat est incorrect. | Compare la sortie à un résultat calculé à la main. |
Si une variable entière divisor contient zéro, 5 / divisor échoue pendant l’exécution avec ArithmeticException: / by zero. L’instruction arithmétique peut être un code source valide même si ses valeurs à l’exécution la font échouer.
Un programme qui affiche une moyenne de 8 alors que la valeur correcte est d’environ 8,33 comporte une erreur de logique. Aucun message du compilateur ne peut t’indiquer que ce résultat est incorrect pour ta tâche. Teste le programme avec des entrées connues, examine les valeurs intermédiaires et trouve le premier calcul incorrect.
Travaille selon un cycle court : modifier, enregistrer, compiler, exécuter, tester. L’enregistrement compte : la compilation lit le fichier enregistré, donc les modifications non enregistrées ne peuvent pas changer le programme compilé.
Points clés
javac Hello.javacompile le code source ;java Helloexécute la classe obtenue.- Le JDK fournit les commandes de développement ; la JVM exécute le bytecode.
- Corrige la première erreur du compilateur et recompile avant de chercher à résoudre les messages suivants.
- Une exception d’exécution arrête le programme ; une erreur de logique nécessite une vérification à l’aide du résultat attendu.
1.3 Affiche du texte avec print et println
L’affichage est le premier moyen de voir ce que fait un programme. Java te permet de contrôler les caractères affichés et l’endroit où commence la ligne suivante.
Suis la position d’affichage
System.out.print(...) écrit sa valeur et laisse la position d’affichage sur la même ligne. System.out.println(...) écrit sa valeur, puis commence une nouvelle ligne. Appeler System.out.println() avec des parenthèses vides ajoute simplement un retour à la ligne.
System.out.print("Hello");
System.out.print(", ");
System.out.println("world");
System.out.println("Bye");
Les deux premiers appels laissent la position après l’espace qui suit la virgule. Le troisième ajoute world à cet endroit, puis passe à une nouvelle ligne. La sortie exacte est :
Hello, world
Bye
Java n’insère aucune espace entre les appels. Si tu supprimes l’espace dans ", ", la première ligne devient « Hello,world ». Un println() vide entre les deux dernières instructions créerait une ligne vide entre les messages.
Choisis entre du texte et une valeur
Un littéral de chaîne de caractères est un texte placé entre guillemets doubles. Afficher "7 * 6" montre le texte « 7 * 6 ». Afficher 7 * 6 évalue la multiplication et montre « 42 ». Les guillemets font partie de la ponctuation du code ; ils ne sont pas affichés avec le littéral.
De même, si name contient « Ada », System.out.println(name); affiche « Ada », tandis que System.out.println("name"); affiche « name ». Utilise la variable sans guillemets lorsque tu veux obtenir la valeur qu’elle contient.
Les guillemets simples ont un autre rôle. 'A' est une valeur char correspondant à un caractère. 'Hello' ne peut pas contenir un message de plusieurs caractères et provoque une erreur de compilation. Utilise "Hello" pour ce texte.
Place des caractères spéciaux dans une chaîne
Une séquence d’échappement commence par une barre oblique inverse et représente un caractère dans le littéral.
| Code dans un littéral | Caractère affiché |
|---|---|
\n | Nouvelle ligne |
\t | Tabulation |
\" | Guillemet double |
\\ | Une barre oblique inverse |
Par exemple :
System.out.println("She said \"hi\"");
System.out.println("C:\\Users");
Ces instructions affichent She said "hi" et C:\Users sur des lignes distinctes. Les barres obliques inverses supplémentaires indiquent à Java comment interpréter le caractère suivant ; elles ne sont pas toutes recopiées dans la sortie.
Un seul appel peut aussi afficher plusieurs lignes :
System.out.println("Name:\tAda\nAge:\t36");
La tabulation sépare l’intitulé de la valeur et \n place l’âge sur la ligne suivante. L’appel à println ajoute aussi son propre retour à la ligne final. Une tabulation déplace la position jusqu’à un taquet de tabulation : sa largeur visible dépend donc de l’environnement d’affichage.
Un littéral de chaîne ordinaire entre guillemets doit s’ouvrir et se fermer sur une seule ligne du code source. Appuyer sur Entrée au milieu laisse un littéral non fermé. Pour répartir un long message sur plusieurs lignes du code source, écris deux littéraux complets reliés par + ou utilise des appels d’affichage distincts.
Points clés
printreste sur la ligne actuelle ;printlnajoute un retour à la ligne après sa valeur.- Les guillemets indiquent un texte littéral :
"name"affiche ces lettres, tandis quenameaffiche la valeur de la variable. - Utilise des séquences d’échappement pour les nouvelles lignes, les tabulations, les guillemets et les barres obliques inverses.
- Les espaces dans une chaîne sont affichées exactement ; les appels d’affichage n’ajoutent aucune espace de séparation.
- Utilise des guillemets doubles pour une chaîne et des guillemets simples pour une valeur
char. - Un littéral de chaîne ordinaire s’ouvre et se ferme sur une seule ligne du code source.
2Stocke des données dans des variables du type approprié
Les variables permettent à un programme de conserver des valeurs entre les instructions, mais chaque valeur stockée possède un type. Suis les affectations étape par étape pour voir ce qui change et ce qui reste fixe. Choisis les types entiers, décimaux, caractères ou booléens adaptés aux données, puis combine du texte et des valeurs pour créer des messages lisibles. De petites différences dans l’écriture des littéraux ou l’ordre des signes plus peuvent changer à la fois le type et le résultat d’une expression.
2.1 Déclare des variables, affecte-leur des valeurs et mets-les à jour
Une variable donne un nom à une valeur pour que les instructions suivantes puissent l’utiliser. Son type indique à Java quel genre de valeur elle peut contenir ; une affectation modifie la valeur stockée.
Déclare et initialise
int age;
age = 36;
La déclaration introduit age comme un int. L’affectation stocke 36. La forme combinée int age = 36; s’appelle une initialisation. Une variable locale doit recevoir une valeur avant que tu la lises. Déclarer int age; puis afficher immédiatement age produit une erreur indiquant que la variable pourrait ne pas avoir été initialisée.
Déclare un nom une seule fois dans le même corps de méthode. Pour modifier sa valeur plus tard, écris age = 37;, sans répéter int. Un second int age = 37; dans ce corps tente de déclarer à nouveau la même variable.
Lis l’affectation de droite à gauche
Le membre de droite de = est calculé en premier. Java stocke ensuite ce résultat dans la variable de gauche :
int count = 5;
count = count + 1;
La seconde instruction lit la valeur actuelle 5, lui ajoute 1 et stocke 6. Le signe = signifie affectation ; il n’affirme pas mathématiquement qu’un nombre est égal à lui-même plus un. Le membre de gauche doit désigner un emplacement où stocker la valeur ; 36 = age; est invalide.
Une affectation copie la valeur à cet instant :
int a = 5;
int b = a;
a = 10;
À présent, a contient 10 et b contient 5. Il n’existe aucun lien permanent qui recalcule b lorsque a change.
Suis un échange de valeurs
Supposons que first contient 4 et second contient 9. La suite first = second; second = first; perd le 4 dès la première étape et laisse les deux valeurs à 9. Conserve d’abord la valeur d’origine :
int temp = first;
first = second;
second = temp;
| Après l’instruction | first | second | temp |
|---|---|---|---|
int temp = first; | 4 | 9 | 4 |
first = second; | 9 | 9 | 4 |
second = temp; | 9 | 4 | 4 |
Un tableau de suivi d’exécution indique la valeur de chaque variable après chaque instruction. Pour int x = 3; x = x * 2; x = x + 1;, les valeurs sont 3, puis 6, puis 7. Mets à jour une ligne à la fois en utilisant les dernières valeurs stockées.
Choisis des noms utiles et des types fixes
Les noms peuvent contenir des lettres, des chiffres, des caractères de soulignement et des signes dollar. Ils ne peuvent pas commencer par un chiffre ni être un mot réservé comme class. La casse compte : total et Total sont différents. Utilise des noms descriptifs en camelCase, comme distanceKm ou secondsLeft.
Une variable final ne peut recevoir une affectation qu’une seule fois. final int SECONDS_PER_HOUR = 3600; donne un nom clair à un facteur de conversion fixe. Lui affecter une nouvelle valeur empêche la compilation. Par convention, les noms de constantes utilisent des mots en majuscules séparés par des caractères de soulignement.
Depuis Java 10, var peut déduire le type d’une variable locale à partir de son initialiseur. var count = 10; déduit int ; var price = 2.5; déduit double. Le type déduit reste fixe. var count; échoue, car il n’y a pas d’initialiseur à partir duquel déduire un type.
Points clés
- Une déclaration indique le nom et le type d’une variable ; une initialisation lui donne aussi une valeur de départ.
- Une affectation évalue le membre de droite, puis stocke le résultat dans la variable de gauche.
- Copier une valeur ne relie pas les variables ; utilise une variable temporaire pour échanger des valeurs.
- Ne lis une variable locale qu’après qu’elle a reçu une valeur.
finalempêche une nouvelle affectation etvardéduit un type fixe à partir d’un initialiseur.
2.2 Choisis un type primitif et écris des littéraux
Le type d’une valeur détermine sa plage de valeurs, l’écriture de ses littéraux et les calculs que Java peut effectuer avec elle. Utilise int pour les dénombrements ordinaires et double pour les mesures ordinaires, tout en sachant reconnaître les autres types primitifs.
Compare les huit types primitifs
| Type | Stockage et valeurs |
|---|---|
byte | Entier sur 8 bits : de −128 à 127 |
short | Entier sur 16 bits : de −32 768 à 32 767 |
int | Entier sur 32 bits : de −2 147 483 648 à 2 147 483 647 |
long | Entier sur 64 bits : de −9 223 372 036 854 775 808 à 9 223 372 036 854 775 807 |
float | Nombre en virgule flottante sur 32 bits ; environ 7 chiffres significatifs |
double | Nombre en virgule flottante sur 64 bits ; environ 15 à 17 chiffres significatifs |
char | Une unité de code UTF-16 sur 16 bits : de 0 à 65 535 |
boolean | true ou false |
Les valeurs finies de float vont approximativement de −3,4 × 10³⁸ à +3,4 × 10³⁸ ; celles de double vont approximativement de −1,8 × 10³⁰⁸ à +1,8 × 10³⁰⁸. Ces vastes plages ne rendent pas exactement représentable chaque nombre décimal qu’elles contiennent.
Un char représente souvent un caractère, comme 'A'. Certains caractères Unicode nécessitent deux unités de code UTF-16 ; un seul char ne peut donc pas représenter tous les caractères possibles. 'A' a pour code numérique 65, 'a' a 97 et '7' a 55. Le caractère '7' est distinct de l’entier 7. Un boolean n’est pas un nombre : boolean active = 1; échoue.
Écris les littéraux selon leur type
Un littéral écrit une valeur directement dans le code source. 42 est un littéral int, 42L un long, 3.5 un double et 3.5f un float. Les littéraux de caractère utilisent des guillemets simples ; les littéraux String utilisent des guillemets doubles. Les noms des types primitifs sont en minuscules, tandis que String commence par une majuscule.
Écris long large = 3000000000L;. Sans le L, ce littéral entier est trop grand. Écris float rate = 3.5f; : 3.5 seul est de type double, que Java ne réduit pas implicitement en float. Une constante entière dont la valeur convient peut initialiser un type entier plus petit : byte b = 100; compile, mais pas byte b = 200;.
Les caractères de soulignement entre les chiffres rendent un littéral lisible : 1_000_000 a la même valeur que 1000000. La notation scientifique utilise e, comme dans 1.5e3, qui signifie 1 500,0. Les nombres décimaux du code source utilisent toujours un point.
Surveille la plage de l’opération
Un calcul entier peut provoquer un dépassement de capacité sans message d’erreur. Ajouter 1 au plus grand int ramène au plus petit int. Le produit 50_000 * 50_000 utilise des calculs int et produit -1794967296. Dans 50_000L * 50_000, un opérande est de type long : le produit est donc le résultat correct 2500000000.
Donner seulement le type long à la variable qui reçoit le résultat intervient trop tard pour corriger un produit int qui a déjà subi un dépassement de capacité. Choisis un opérande de type suffisamment large avant la multiplication.
Les valeurs en virgule flottante présentent une autre limite. Beaucoup de fractions décimales sont stockées sous forme d’approximations binaires : 0.1 + 0.2 affiche 0.30000000000000004. Formate ces résultats pour l’affichage. Les calculs monétaires exacts peuvent stocker des centimes entiers dans un long ; la classe BigDecimal offre une autre possibilité pour les calculs décimaux exacts.
Points clés
- Java possède huit types primitifs ;
Stringest une classe. - Utilise le suffixe d’un littéral pour choisir
long(L) oufloat(f). - Les calculs entiers peuvent subir un dépassement de capacité sans avertissement ; élargis un opérande avant le calcul.
- Les types en virgule flottante stockent de nombreuses fractions décimales de manière approximative.
- Un
charstocke une unité de code UTF-16, tandis qu’unbooleanstocke une valeur de vérité. - Un nombre décimal dans le code source utilise un point, même sur un ordinateur qui utilise la virgule décimale.
2.3 Stocke du texte et assemble-le par concaténation
Une String contient du texte, notamment des espaces, des chiffres, de la ponctuation, ou aucun caractère. L’opérateur + peut combiner ce texte avec d’autres valeurs pour construire un message.
Assemble des valeurs en texte
String firstName = "Ada";
String lastName = "Lovelace";
System.out.println(firstName + " " + lastName);
La sortie est « Ada Lovelace ». Le littéral du milieu fournit l’espace. Sans lui, firstName + lastName produirait « AdaLovelace ». La concaténation n’ajoute pas de séparateurs pour toi.
La concaténation consiste à assembler des valeurs dans une nouvelle chaîne. Si l’un des opérandes de + est une String, Java convertit l’autre valeur en texte et les assemble. Ainsi, "Age: " + 36 devient « Age: 36 » et "Price: " + 2.5 devient « Price: 2.5 ». Les chiffres du résultat font désormais partie d’une valeur textuelle.
String commence par un S majuscule. Contrairement aux huit types primitifs, c’est une classe. Écrire string name = "Ada"; avec un s minuscule empêche la compilation. La chaîne vide "" est un texte valide sans caractères ; ce n’est pas une valeur manquante.
Suis les signes plus de gauche à droite
Considère :
System.out.println("Sum: " + 2 + 3);
Le premier + assemble la String et 2, ce qui produit « Sum: 2 ». Le second assemble cette String et 3, ce qui produit « Sum: 23 ». Une fois que le résultat intermédiaire est du texte, le + suivant continue à assembler du texte.
Compare trois formes :
| Expression | Résultat | Raison |
|---|---|---|
"Sum: " + 2 + 3 | "Sum: 23" | Du texte est présent dès la première addition. |
2 + 3 + " apples" | "5 apples" | La première opération additionne deux nombres. |
"Sum: " + (2 + 3) | "Sum: 5" | Les parenthèses font effectuer la somme en premier. |
Utilise des parenthèses lorsqu’un message doit contenir le résultat d’une addition ou d’une soustraction. Par exemple, "Diff: " + (5 - 2) donne « Diff: 3 ». Sans les parenthèses, "Diff: " + 5 - 2 tente de soustraire 2 à une String et ne compile pas.
La multiplication et la division sont prioritaires sur +. L’expression "Area: " + 4 * 5 calcule d’abord le produit et donne « Area: 20 ».
Construis un message par étapes
String message = "Hi";
message += "!";
La variable mise à jour contient « Hi! ». Pour une String, += ajoute du texte en affectant à nouveau le résultat de la concaténation à la variable. Tu peux assembler un court message avec plusieurs instructions et l’afficher une seule fois à la fin.
Fais attention aux caractères. Deux opérandes char ne déclenchent pas de concaténation de String. 'A' + 'B' additionne leurs codes numériques, 65 et 66, et produit l’int 131. Commencer par la String vide change la suite : "" + 'A' + 'B' crée d’abord « A », puis « AB ». Les guillemets déterminent les types des opérandes et donc aussi le sens de +.
Points clés
- La concaténation assemble du texte ; elle n’insère aucune espace supplémentaire.
- Une suite d’opérations
+s’effectue de gauche à droite après les opérations prioritaires. - Place une addition ou une soustraction numérique entre parenthèses avant d’assembler son résultat à un intitulé.
- Deux valeurs
charsont additionnées numériquement, sauf si une String fait déjà partie de l’opération.
3Effectue des calculs avec des expressions arithmétiques
Les calculs dépendent à la fois de l’ordre des opérations et des types de leurs opérandes. Suis les expressions avant de les exécuter, surtout lorsqu’une division apparaît dans un calcul plus vaste. La division entière et le reste répartissent des quantités en groupes ou en unités de temps ; les calculs décimaux conservent les fractions. Les méthodes prêtes à l’emploi de Math traitent les racines, les puissances et l’arrondi ; leurs types de retour comptent lorsque tu stockes leurs résultats.
3.1 Écris des expressions en respectant la priorité des opérateurs
Une expression combine des valeurs pour produire un résultat. Java l’évalue selon la priorité des opérateurs, puis une instruction peut stocker ou afficher ce résultat.
Écris les opérations explicitement
Les opérateurs arithmétiques sont +, -, *, / et % : addition, soustraction, multiplication, division et reste. Avec int width = 4; et int height = 5;, width * height vaut 20.
Toute multiplication nécessite *. La forme 2(3 + 4), semblable à une écriture algébrique, n’est pas valide en Java ; écris 2 * (3 + 4). Java n’a pas d’opérateur arithmétique de puissance. 2 ^ 3 désigne une opération bit à bit et produit 1, pas 8. Pour élever une valeur au carré, écris x * x ; pour calculer une autre puissance, utilise Math.pow.
Applique les priorités avant de lire de gauche à droite
| Ordre | Opérateurs ou regroupement |
|---|---|
| D’abord | Parenthèses |
| Ensuite | Signe moins unaire et transtypages |
| Ensuite | *, /, % |
| Enfin | +, - |
Au même niveau, ces opérateurs arithmétiques se regroupent de gauche à droite. 2 + 3 * 4 vaut 14 ; (2 + 3) * 4 vaut 20. Dans 10 - 4 - 3, la première soustraction donne 6 et la seconde donne 3. Dans 24 / 4 * 2, la division donne 6 et la multiplication donne 12. Pour traiter 4 * 2 comme dénominateur, il faudrait des parenthèses.
Calcule correctement une moyenne
Supposons int a = 7, b = 8, c = 10;. L’expression a + b + c / 3 ne divise que c. La division entière donne 3 pour 10 / 3, puis les additions donnent 18.
(a + b + c) / 3 regroupe le total entier, 25, mais les deux opérandes de / sont des entiers. Le résultat est 8. Utiliser (a + b + c) / 3.0 conserve la partie fractionnaire et produit 8.333333333333334.
Les types des opérandes déterminent le calcul. Deux opérandes int produisent un résultat int. Un opérande double entraîne la conversion de l’autre opérande numérique en double, comme dans 5 * 2.0, dont le résultat est 10.0. La variable qui reçoit le résultat ne change pas la façon dont le calcul précédent a été effectué.
Mets à jour une valeur stockée
int total = 10;
total += 5;
total *= 2;
total--;
Les valeurs stockées deviennent 10, 15, 30 et 29. Pour ces opérandes int, total += 5; effectue la même mise à jour que total = total + 5;. Les opérateurs -=, /= et %= combinent de la même façon une opération et une affectation. count++; augmente une variable de 1 et count--; la diminue de 1. Utilisées comme instructions distinctes, ces opérations sont faciles à suivre.
Une expression comme a + b ne modifie aucun des deux opérandes. Pour utiliser son résultat, affecte-le ou passe-le à un appel d’affichage : int sum = a + b; ou System.out.println(a + b);. La ligne isolée a + b; ne compile pas, car Java n’autorise pas cette expression arithmétique comme instruction autonome. Les affectations, incrémentations, décrémentations et appels de méthodes peuvent constituer des instructions autonomes et avoir des effets.
Points clés
- Utilise des opérateurs explicites :
*multiplie et^ne calcule pas une puissance. - Applique d’abord les priorités ; au même niveau arithmétique, procède de gauche à droite.
- Place un total entier entre parenthèses avant de le diviser pour trouver une moyenne.
- Les types des opérandes déterminent les résultats des calculs avant l’affectation.
- Une affectation composée stocke une valeur mise à jour ; les instructions autonomes
++et--la modifient de 1.
3.2 Utilise la division entière et le reste
La division entière indique combien de groupes complets tiennent dans une quantité. Le reste indique ce qui subsiste. Ensemble, ces opérations permettent de répartir une quantité en parties utiles.
Prévois le quotient et le reste
Lorsque les deux opérandes sont des entiers, / supprime la partie fractionnaire en se rapprochant de zéro. 7 / 2 vaut 3, 2 / 3 vaut 0 et -7 / 2 vaut −3. C’est une troncature, pas un arrondi à l’entier le plus proche.
L’opérateur reste % renvoie ce qui subsiste après la division. 17 / 5 donne 3 et 17 % 5 donne 2. Trois groupes de 5 représentent 15, il reste donc 2. Pour des opérandes entiers et un diviseur non nul, (a / b) * b + a % b reconstitue a avec les calculs entiers de Java.
Le signe d’un reste non nul est celui de l’opérande de gauche : -7 % 3 vaut −1, tandis que 7 % -3 vaut 1. Pour les entiers positifs ou nuls, n % 2 vaut 0 pour les valeurs paires et 1 pour les valeurs impaires.
Décompose des secondes en unités plus grandes
Pars de 3 725 secondes :
int totalSeconds = 3725;
int hours = totalSeconds / 3600;
int secondsAfterHours = totalSeconds % 3600;
int minutes = secondsAfterHours / 60;
int seconds = secondsAfterHours % 60;
La première division donne 1 heure complète. Le reste est de 125 secondes. Diviser ce reste par 60 donne 2 minutes, avec 5 secondes restantes. Le résultat est 1 h 2 min 5 s. En reconstituant le total, on obtient 3 600 secondes plus 120 secondes plus 5 secondes, soit 3 725.
Utilise le reste après retrait des heures pour trouver les minutes dans l’heure en cours. Diviser le total d’origine par 60 donnerait les 62 minutes complètes, y compris celles déjà comptées comme une heure.
Les mêmes opérateurs extraient les chiffres décimaux d’un entier positif ou nul. 4827 % 10 donne le dernier chiffre, 7 ; 4827 / 10 donne les chiffres restants à gauche, 482.
Distingue les groupes complets du nombre de contenants nécessaires
Pour 50 œufs et des boîtes de 12 œufs, 50 / 12 donne 4 boîtes pleines et 50 % 12 donne 2 œufs restants. Il faut une cinquième boîte pour contenir tous les œufs. Pour des effectifs positifs ou nuls et des capacités de boîte strictement positives, l’expression entière (count + size - 1) / size arrondit le nombre de contenants à l’entier supérieur, à condition que l’addition ne provoque pas de dépassement de capacité. Dans cet exemple, (50 + 12 - 1) / 12 donne 5.
Choisis une division avec partie fractionnaire avant de la faire
| Expression | Résultat stocké ou calculé |
|---|---|
double result = 7 / 2; | 3.0 |
double result = 7 / 2.0; | 3.5 |
double result = (double) 7 / 2; | 3.5 |
Une destination double ne peut pas récupérer une partie fractionnaire supprimée. Donne à un opérande le type double avant la division lorsque tu as besoin de la partie fractionnaire.
Une division ou un calcul de reste par le zéro entier lève une ArithmeticException pendant l’exécution. La division en virgule flottante se comporte différemment : 5.0 / 0 donne Infinity, -5.0 / 0 donne -Infinity et 0.0 / 0 donne NaN, qui signifie « pas un nombre ». Un résultat peut donc être inutilisable même lorsque l’exécution ne s’arrête pas.
Points clés
- La division entière
/tronque vers zéro ;%renvoie le reste. - Un reste entier non nul a le signe du dividende.
- Utilise des quotients et des restes successifs pour décomposer des secondes en heures, minutes et secondes.
- Les boîtes pleines et les boîtes nécessaires pour contenir tous les éléments répondent à des questions différentes.
- Donne à un opérande le type
doubleavant la division pour conserver une partie fractionnaire. - La division entière par zéro lève une exception ; la division en virgule flottante peut produire l’infini ou
NaN.
3.3 Effectue des calculs avec des nombres décimaux et la classe Math
Les calculs décimaux sont utiles pour les mesures et les moyennes. La classe Math propose des calculs prêts à l’emploi, tandis que l’arrondi permet de choisir comment stocker ou présenter un résultat.
Conserve les fractions et reconnais les approximations
150 / 2.5 donne 60.0, une vitesse en km/h lorsque la distance est de 150 km et la durée de 2,5 heures. Comme un opérande est un double, la division conserve un résultat fractionnaire si nécessaire. Les valeurs ordinaires de type double qui sont entières s’affichent avec une partie décimale, comme 60.0.
Un double stocke une approximation binaire de nombreuses valeurs décimales. Ainsi, 1.1 * 3 affiche 3.3000000000000003 et 10.0 / 3 affiche 3.3333333333333335. Garde la valeur utilisée pour les calculs suivants et arrondis-la au moment de la présenter.
Les valeurs grandes ou petites peuvent s’afficher en notation scientifique. 1.23456789E7 représente 12 345 678,9 et 1.0E-4 représente 0,0001. Pour les valeurs finies positives, la notation ordinaire est utilisée de 0,001 inclus à 10 000 000 exclu. La notation scientifique modifie la forme affichée, pas la valeur sous-jacente.
Appelle des méthodes utiles de Math
Math se trouve dans java.lang : aucune importation n’est donc nécessaire.
| Appel | Résultat et rôle |
|---|---|
Math.sqrt(16) | 4.0, une racine carrée |
Math.pow(2, 10) | 1024.0, une puissance |
Math.abs(-7) | 7, une valeur absolue |
Math.max(3, 9) | 9, la plus grande valeur |
Math.min(3, 9) | 3, la plus petite valeur |
Math.sqrt et Math.pow renvoient un double. La constante Math.PI vaut environ 3,141592653589793. Pour un cercle de rayon 2,5 cm, Math.PI * 2.5 * 2.5 donne 19.634954084936208 cm², soit environ 19,63 cm². Pour un triangle rectangle dont les côtés de l’angle droit mesurent 3 cm et 4 cm, Math.sqrt(3 * 3 + 4 * 4) additionne d’abord les carrés de ces côtés pour obtenir 25, puis donne 5.0 cm.
Choisis le sens de l’arrondi
| Appel | Résultat |
|---|---|
Math.round(2.4) | 2 |
Math.round(2.5) | 3 |
Math.round(-2.5) | -2 |
Math.floor(2.7) | 2.0 |
Math.ceil(2.1) | 3.0 |
Math.floor(-2.7) | -3.0 |
round choisit l’entier le plus proche et, pour une valeur exactement à mi-chemin, arrondit vers l’infini positif. floor arrondit vers l’infini négatif ; ceil arrondit vers l’infini positif. Pour les nombres négatifs, arrondir vers le bas donne une valeur plus négative : ainsi, la partie entière inférieure de −2,7 est −3,0.
Pour un argument double, Math.round renvoie un long. Stocke ce résultat dans un long ou convertis-le explicitement lorsqu’un int convient : int rounded = (int) Math.round(2.7); stocke 3. floor et ceil renvoient des valeurs double.
Pour arrondir une valeur stockée à deux décimales, utilise Math.round(12.3456 * 100) / 100.0, qui donne 12.35. La multiplication amène le chiffre des centièmes au rang des unités. Diviser par 100.0 ramène ensuite la valeur à son échelle avec une division en virgule flottante ; diviser par l’entier 100 supprimerait la fraction et donnerait 12. Si seul le texte affiché doit être arrondi, printf peut formater directement la valeur d’origine.
Points clés
- Un
doubleconserve les résultats fractionnaires, mais approxime de nombreuses fractions décimales. Math.sqrt,Math.powetMath.PIpermettent d’effectuer des calculs géométriques sans importation.roundchoisit l’entier le plus proche ;flooretceilarrondissent dans une direction donnée.Math.round(double)renvoie unlong, tandis queflooretceilrenvoient undouble.- Pour ramener une valeur arrondie à son échelle, utilise un diviseur décimal afin de conserver sa partie fractionnaire.
4Convertis des valeurs d’un type à un autre
Une valeur peut passer d’un type numérique à un autre ou du domaine des nombres à celui du texte et inversement. Chaque conversion suit ses propres règles : certaines conversions numériques sont automatiques, d’autres nécessitent un transtypage, et un texte numérique doit être analysé avant tout calcul. Suis la conversion à l’instant précis où elle se produit. Une conversion effectuée après une opération ne peut pas récupérer une information déjà perdue, tandis qu’une conversion réussie peut quand même modifier une valeur grande ou fractionnaire.
4.1 Effectue des conversions élargissantes et des transtypages explicites
Java convertit parfois automatiquement une valeur numérique. D’autres conversions nécessitent un transtypage explicite. Un transtypage change le type d’une valeur à un endroit précis d’une expression : sa position influe donc sur le résultat.
Effectue une conversion élargissante automatique
La principale chaîne de conversions numériques élargissantes est byte → short → int → long → float → double. Un char peut aussi être converti par élargissement en int, puis dans les types suivants. Par exemple, double d = 5; stocke 5.0, et toute valeur int tient exactement dans un long.
Une conversion élargissante vers un type en virgule flottante peut entraîner une perte de précision. Les conversions de int vers float, de long vers float et de long vers double peuvent arrondir un grand entier. La conversion d’un int en double est exacte. Par exemple, (float) 16777217 devient 1.6777216E7, qui représente 16 777 216.
Effectue une conversion réductrice par transtypage
Un transtypage consiste à écrire le type cible entre parenthèses avant la valeur :
int n = (int) 3.99;
Le résultat stocké est 3. Sans (int), Java refuse d’affecter le littéral double à un int. La conversion d’un double fini et compris dans la plage du type entier effectue une troncature vers zéro : (int) -3.99 donne aussi −3. La troncature diffère de l’arrondi ; (int) Math.round(3.99) donne 4.
Les conversions réductrices nécessitent généralement un transtypage. Une exception utile permet à une expression constante entière dont la valeur convient d’initialiser un byte, un short ou un char. Ainsi, byte b = 100; est valide sans (byte). Une variable int non constante ne bénéficie pas de cette exception simplement parce que sa valeur actuelle convient.
Place le transtypage avant l’opération qui en a besoin
Soit int sum = 25; et int count = 3;.
| Expression | Ce qui se passe | Résultat |
|---|---|---|
(double) sum / count | Conversion de sum, puis division avec un double. | 8.333333333333334 |
(double) (sum / count) | Division entière, puis conversion du résultat entier. | 8.0 |
Un transtypage est prioritaire sur la multiplication et la division. Les parenthèses déterminent s’il s’applique à un seul opérande ou à un calcul terminé. Un transtypage après une division entière ne peut pas restituer l’information supprimée.
Prévois les changements des caractères et des petits entiers
(int) 'A' donne son code de caractère, 65. Ajouter 1 à 'A' produit l’int 66. Pour reconvertir le résultat complet en caractère, écris (char) ('A' + 1), ce qui donne 'B'. Sans les parenthèses autour de la somme, le transtypage ne s’appliquerait qu’à 'A'.
Une conversion réductrice entre types entiers ne conserve que les bits de poids faible. (byte) 200 devient −56 ; (int) 3_000_000_000L devient −1 294 967 296. Un transtypage autorise la conversion, mais ne vérifie pas que la valeur d’origine tient dans le type.
L’affectation composée comprend une conversion intégrée vers le type de gauche. Avec int x = 10;, x += 2.7; calcule 12,7 et le réduit à 12. L’affectation simple x = x + 2.7; échoue, car son membre de droite est un double.
Points clés
- La conversion élargissante est automatique, mais certaines conversions en virgule flottante peuvent arrondir de grands entiers.
- Une conversion réductrice nécessite généralement un transtypage ; une exception permet d’affecter certaines constantes entières à des types plus petits lorsque leur valeur convient.
- Un transtypage d’un nombre décimal vers un entier effectue une troncature vers zéro lorsque la valeur est dans la plage du type.
- Transtype un opérande avant la division lorsque l’opération doit conserver une fraction.
- Une conversion réductrice entre types entiers peut modifier une valeur en supprimant les bits de poids fort.
- Une affectation composée comprend une conversion vers le type de la variable.
4.2 Convertis du texte en nombres et des nombres en texte
Un texte peut contenir des chiffres sans être un nombre. Pour calculer avec du texte saisi ou stocké, analyse-le pour le convertir en type numérique. Pour construire un message, reconvertis une valeur numérique en texte.
Analyse le texte avant de calculer
L’expression "42" + 1 produit « 421 ». Comme l’opérande de gauche est une String, + effectue une concaténation. Integer.parseInt("42") + 1 produit 43, car l’analyse fournit un int avant l’addition.
String first = "12";
String second = "30";
int total = Integer.parseInt(first) + Integer.parseInt(second);
Ici, total contient 42. Assembler les chaînes d’origine donnerait « 1230 ». Choisis la conversion selon l’usage prévu de la valeur, et non selon la ressemblance de ses caractères avec des chiffres.
Integer.parseInt(text) renvoie un int ; Long.parseLong(text) renvoie un long. Integer.valueOf("42") renvoie un objet Integer, que Java convertit automatiquement en int lorsqu’un int est nécessaire. Pour une conversion directe de texte en int, parseInt indique clairement le résultat voulu.
Analyse les nombres décimaux et les valeurs de vérité
Double.parseDouble("3.75") renvoie le double 3,75. Son format textuel utilise un point décimal sur tous les ordinateurs, quels que soient les paramètres régionaux. Double.parseDouble("3,5") échoue. Les littéraux du code source Java utilisent aussi un point, même si les méthodes de lecture au clavier peuvent suivre des paramètres régionaux.
Boolean.parseBoolean(text) suit une autre règle : la méthode renvoie true pour « true », quelle que soit la combinaison de majuscules et de minuscules, comme « TRUE ». Tout autre texte donne false, y compris « yes ». La méthode n’interprète pas un mot affirmatif quelconque comme vrai.
Reconnais les textes numériques invalides
Un texte numérique invalide provoque une NumberFormatException pendant l’exécution du programme. Integer.parseInt("4.5") échoue, car un texte décimal ne représente pas un entier. Integer.parseInt("") et Integer.parseInt(" 42") échouent aussi. Le message de l’exception indique le texte qui n’a pas pu être converti.
Le traitement des caractères blancs dépend de la méthode d’analyse. Double.parseDouble ignore les espaces au début et à la fin, tandis que Integer.parseInt ne les ignore pas. Choisis des entrées de test qui révèlent ces différences lors de la lecture des données utilisateur.
Une méthode pratique consiste à lire une ligne entière et à l’analyser :
int age = Integer.parseInt(scanner.nextLine());
double height = Double.parseDouble(scanner.nextLine());
Chaque appel consomme sa ligne entière, y compris la fin de ligne. Cela rend la lecture du texte et celle des nombres cohérentes et évite de mélanger la lecture de jetons et celle de lignes entières.
Convertis un nombre en texte
String.valueOf(42), Integer.toString(42) et "" + 42 produisent tous la String « 42 ». Double.toString(2.50) produit « 2.5 ». L’écriture décimale d’origine ne reste pas attachée au nombre stocké ; cette conversion n’ajoute donc pas de zéro final pour la préserver.
Utilise String.format lorsque tu as besoin de stocker du texte avec un nombre fixe de décimales. Utilise printf lorsque tu veux afficher directement ce texte formaté. Ni un transtypage numérique ni une concaténation simple ne produisent un affichage fixe à deux décimales.
Points clés
- Un texte qui ressemble à un nombre reste une String tant qu’il n’est pas analysé.
Integer.parseIntetDouble.parseDoubleproduisent des valeurs numériques utilisables dans des calculs.Double.parseDoubleutilise un point décimal indépendamment des paramètres régionaux.- Un texte numérique invalide provoque une
NumberFormatException; l’analyse d’un entier rejette les espaces qui l’entourent. Boolean.parseBooleanaccepte « true » quelle que soit la casse et renvoie false pour les autres textes.- La conversion simple d’un nombre en texte ne conserve pas les zéros supplémentaires à la fin.
5Lis des données en entrée et construis des programmes complets
Les entrées et les sorties transforment un calcul en un programme utilisable. Associe chaque invite à une lecture adaptée avec Scanner, décide comment les nombres décimaux seront saisis et choisis des intitulés de sortie et des formats numériques clairs. Construis un programme complet à partir d’un schéma entrée–traitement–sortie, puis teste-le avec des résultats calculés à la main. Un programme peut compiler et se terminer correctement tout en lisant la mauvaise ligne ou en affichant la mauvaise valeur.
5.1 Lis des données en entrée avec Scanner
Les entrées au clavier arrivent sous forme de texte. Un Scanner peut lire une ligne entière, un mot ou un mot converti en nombre. Choisis une méthode de lecture cohérente avant de demander des valeurs à l’utilisateur.
Crée un Scanner et lis une ligne
import java.util.Scanner;
public class Greeting {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("What is your name? ");
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
}
}
L’importation se place avant la classe. L’instruction de création se place dans main et relie le Scanner à System.in. Un seul Scanner suffit pour ce programme. nextLine() attend la ligne saisie et renvoie son texte sans le retour à la ligne. Si l’utilisateur saisit « Ada », la dernière instruction affiche « Hello, Ada! ». Utiliser print pour l’invite permet de saisir la réponse à côté de la question.
Choisis entre lignes et jetons
| Méthode | Ce qu’elle lit |
|---|---|
nextLine() | Le reste de la ligne actuelle, sans sa fin |
next() | Le jeton suivant sous forme de texte, les jetons étant séparés par des caractères blancs |
nextInt() | Le jeton suivant sous forme d’int |
nextLong() | Le jeton suivant sous forme de long |
nextDouble() | Le jeton suivant sous forme de double |
nextBoolean() | Le jeton suivant sous forme de valeur de vérité |
Pour « Ada Lovelace », next() renvoie « Ada ». Un appel ultérieur à nextLine() renvoie « Lovelace », précédé de son espace initiale. Deux appels à nextInt() peuvent lire « 3 4 » sur une même ligne. Un jeton numérique qui ne convient pas à la méthode, comme « 4.5 » ou « abc » pour nextInt(), provoque une InputMismatchException.
Tiens compte de la fin de ligne non lue
Supposons que l’utilisateur saisit « 30 », appuie sur Entrée, puis saisit « Ada Lovelace » et appuie sur Entrée. Ce code ne lit pas le nom comme prévu :
int age = scanner.nextInt();
String name = scanner.nextLine();
nextInt() consomme 30 mais laisse la fin de ligne. nextLine() consomme immédiatement le reste vide de cette même ligne : name vaut donc "". Ajoute scanner.nextLine(); entre les deux instructions pour écarter ce reste avant de lire le nom sur la ligne suivante.
Une autre solution consiste à lire chaque réponse avec nextLine() et à analyser les lignes numériques : int age = Integer.parseInt(scanner.nextLine());. Cela évite d’alterner entre deux unités de lecture différentes.
Précise la convention décimale
nextDouble() suit les paramètres régionaux du Scanner, qui sont initialement les paramètres régionaux de formatage par défaut de l’ordinateur. Des paramètres utilisant la virgule décimale acceptent "3,5" comme nombre décimal et rejettent « 3.5 » dans cet exemple. Pour lire systématiquement des nombres décimaux avec un point, ajoute import java.util.Locale; et crée :
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
Lire une ligne entière avec Double.parseDouble(scanner.nextLine()) utilise aussi un point. Changer les paramètres régionaux du Scanner ne modifie ni les littéraux du code source Java ni les paramètres régionaux utilisés par les appels ultérieurs à printf.
Lis les valeurs dans l’ordre demandé par les invites. Si tu demandes un nom puis un âge, la première lecture doit stocker le nom. Une lecture mal placée peut soit mettre des données dans la mauvaise variable, soit déclencher une erreur de conversion.
Points clés
- Importe
java.util.Scanneravant la classe et crée un Scanner dansmain. nextLine()lit le reste d’une ligne ; les méthodes de lecture de jetons lisent des valeurs séparées par des caractères blancs.- Un jeton numérique de type incorrect provoque une
InputMismatchException. - Après la lecture d’un jeton numérique, consomme le reste de la ligne avant de lire du texte sur la ligne suivante.
useLocale(Locale.US)impose le point décimal pour les entrées de Scanner ; l’analyse de lignes est une autre méthode cohérente.- Fais correspondre les lectures d’entrées à l’ordre des invites.
5.2 Formate la sortie avec printf
La sortie formatée contrôle la façon dont les valeurs apparaissent dans un message. printf peut afficher un nombre fixe de décimales, ajouter un retour à la ligne et aligner des valeurs en colonnes sans modifier les valeurs stockées.
Fais correspondre les emplacements aux valeurs
Une chaîne de format contient du texte ordinaire et des spécificateurs qui commencent par %. Chaque spécificateur qui consomme une valeur prend la valeur suivante fournie après la chaîne de format :
System.out.printf("%s is %d years old%n", "Ada", 36);
Cette instruction affiche « Ada is 36 years old » et commence une nouvelle ligne. %s affiche du texte ou une autre valeur sous forme de texte, %d affiche un entier tel qu’un int ou un long, et %f affiche une valeur en virgule flottante. %n insère un retour à la ligne sans consommer de valeur. %% affiche un signe pourcentage.
printf n’ajoute pas automatiquement de retour à la ligne. Inclus %n lorsque la sortie suivante doit commencer sur une nouvelle ligne. La séquence d’échappement ordinaire \n représente aussi un caractère de nouvelle ligne dans un texte Java ; %n est le séparateur de ligne du formateur adapté à la plateforme.
Fixe le nombre de décimales à afficher
%f seul affiche six chiffres après le séparateur décimal : le formatage de 2.5 donne « 2.500000 ». La précision de %.2f demande deux décimales :
System.out.printf("Total: %.2f%n", 12.3456);
Avec un formatage américain, la sortie est « Total: 12.35 ». La valeur est arrondie dans le texte affiché. Une variable contenant 12,3456 conserve cette valeur pour les calculs après l’affichage.
Pour System.out.printf("%d items at %.2f each, total %.2f%n", 3, 1.5, 3 * 1.5);, les valeurs remplissent les trois emplacements dans l’ordre. Avec des paramètres américains, la sortie est « 3 items at 1.50 each, total 4.50 ».
Aligne les champs avec une largeur
Une largeur fixe la taille minimale d’un champ. %5d aligne un entier à droite sur au moins cinq caractères ; %-6s aligne du texte à gauche sur au moins six caractères. %6.1f combine une largeur de 6 et une décimale.
System.out.printf("[%5d][%-6s][%6.1f]%n", 42, "Ada", 9.25);
Avec des paramètres américains, la sortie exacte est [ 42][Ada ][ 9.3]. Les crochets rendent visibles les espaces de remplissage. Une valeur plus longue que la largeur prévue reste affichée en entier ; la largeur ne supprime aucun caractère.
Un spécificateur incompatible provoque une erreur d’exécution. printf("%d%n", 2.5) compile, mais lève une IllegalFormatConversionException, car %d attend une valeur entière. Un nombre insuffisant de valeurs, comme dans printf("%d %d%n", 2), provoque une MissingFormatArgumentException.
Choisis entre affichage et texte stocké
String.format applique les mêmes règles de formatage, mais renvoie une String :
String line = String.format("%.1f km", 12.345);
Avec des paramètres américains, line contient « 12.3 km » ; cette instruction n’a rien affiché.
Les deux méthodes de formatage utilisent les paramètres régionaux par défaut, sauf si tu leur en transmets. Ajoute import java.util.Locale;, puis utilise System.out.printf(Locale.US, "%.2f%n", 12.3456); pour obtenir systématiquement « 12.35 » au lieu de "12,35", utilisé avec des paramètres à virgule décimale. String.format peut aussi prendre Locale.US en premier argument. L’affichage d’un double avec println utilise un point indépendamment des paramètres régionaux de formatage.
Points clés
- Associe chaque spécificateur qui consomme une valeur à la valeur suivante d’un type adapté.
- Utilise
%npour un retour à la ligne et%%pour un signe pourcentage littéral. %.2farrondit le texte affiché à deux décimales sans changer la valeur stockée.- La largeur complète un champ jusqu’à une taille minimale ; elle ne tronque pas les valeurs plus longues.
String.formatrenvoie du texte, tandis queprintfl’affiche.- Transmets des paramètres régionaux pour contrôler le séparateur décimal dans la sortie formatée.
5.3 Combine la lecture des données, les calculs et l’affichage des résultats
Un programme de calcul complet relie trois étapes : lire les entrées, effectuer les calculs et afficher les résultats. Planifier les valeurs et leurs unités avant de saisir le code aide à choisir les types et à tester le résultat.
Planifie un programme de calcul de durée de trajet
Les entrées sont la distance en kilomètres et la vitesse moyenne en km/h. Diviser la distance par la vitesse donne la durée en heures. Les deux mesures doivent être de type double pour que la division puisse conserver une fraction. La sortie indiquera les heures et les minutes entières, après arrondi à la minute la plus proche.
import java.util.Scanner;
public class TravelTime {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Distance (km): ");
double distance = Double.parseDouble(scanner.nextLine());
System.out.print("Speed (km/h): ");
double speed = Double.parseDouble(scanner.nextLine());
int totalMinutes = (int) Math.round(distance / speed * 60);
int hours = totalMinutes / 60;
int minutes = totalMinutes % 60;
System.out.println("Travel time: " + hours + " h " + minutes + " min");
}
}
Pour 150 km à 80 km/h, la division donne 1,875 heure. La multiplication par 60 donne 112,5 minutes. Math.round renvoie le long 113 et le transtypage le convertit en int. La division entière et le reste donnent ensuite 1 heure et 53 minutes. La sortie est « Travel time: 1 h 53 min ».
Si la distance et la vitesse étaient toutes deux de type int, 150 / 80 * 60 produirait 60. La fraction disparaît lors de la division, avant la multiplication. Le choix des types fait partie du plan, pas seulement de l’instruction d’affichage finale.
Choisis séparément l’affichage et les calculs
Pour une addition d’un total de 87,60 partagée entre 4 personnes, stocke le total dans un double et le nombre de personnes dans un int. double share = total / people; donne 21,9. Avec un formatage américain, System.out.printf("Each person pays %.2f%n", share); affiche « Each person pays 21.90 ». Le formatage fournit la deuxième décimale sans modifier le calcul.
Pour les notes entières 7, 8 et 10, double average = (a + b + c) / 3.0; donne 8.333333333333334, affiché sous la forme « 8.33 » avec %.2f. Les parenthèses regroupent le total et le diviseur décimal conserve sa partie fractionnaire.
Teste avec des résultats connus
Calcule les résultats attendus avant d’exécuter le programme. Pour la durée du trajet, 120 km à 60 km/h doivent donner 2 h 0 min. Une distance de 0 km à une vitesse positive doit donner 0 h 0 min. Essaie des entrées proches d’un seuil d’arrondi et des distances valides plus grandes pour tester davantage que le calcul le plus simple.
Inclus des entrées nulles, négatives et grandes lorsque tu vérifies le comportement du programme. Décide si chaque entrée a un sens pour la tâche. Un nombre de personnes égal à zéro fait produire Infinity à total / people lorsque total est un double non nul ; une division entière par zéro lève une ArithmeticException. Une exécution réussie ne garantit pas à elle seule une réponse utile.
Lorsque la sortie diffère de ce que tu attends, affiche les valeurs intermédiaires ou suis-les dans un tableau. Trouve la première valeur incorrecte, corrige l’instruction responsable et relance les tests connus. Compare les espaces et les intitulés ainsi que les nombres.
Utilise des noms comme totalMinutes, des constantes nommées comme MINUTES_PER_HOUR, des unités dans les invites et de courts commentaires qui expliquent le but d’un calcul.
Points clés
- Liste les entrées, les sorties, les formules, les unités et les types avant d’écrire un programme de calcul.
- Conserve les fractions des mesures pendant les calculs, puis arrondis lorsque la sortie demande des unités entières.
- Teste les entrées ordinaires, limites et inadaptées en comparant le comportement obtenu à celui attendu.
- Suis les valeurs intermédiaires pour trouver la première étape incorrecte.
- Des noms, des constantes et des unités clairs facilitent la vérification d’un programme.
Premiers programmes Java : exemples
1Construis et exécute un petit programme qui affiche un message
13 étapes
- 1IntroductionSuis les instructions à partir de main
Un programme Java a besoin d’un point d’entrée et d’une suite d’instructions. Dans la forme classique, une classe contient
main, etmaincontient les instructions exécutées.Tu vas construire un court message, lancer le programme et suivre la position d’affichage au fil de plusieurs appels. La même démarche aide au débogage : vérifie d’abord que le code source compile, puis qu’il s’exécute et enfin que sa sortie correspond au message voulu.
- 2ExemplePlace le message dans la méthode
Commence par cette structure complète :
public class Notice { public static void main(String[] args) { System.out.println("Studio open"); } }Les accolades extérieures délimitent la classe ; la paire intérieure délimite la méthode. Java commence par l’instruction d’affichage dans
main. Son point-virgule termine l’instruction, tandis que les accolades fermantes terminent les deux corps qui la contiennent. - 3ConseilVérifie les noms avant d’ajouter du code
Enregistre la classe publique
NoticedansNotice.java. Respecte exactement leNmajuscule. Conserve aussiSystemet le nom de méthodemainen minuscules : Java considère les différences de casse comme des noms différents.Indente chaque corps imbriqué de quatre espaces pour repérer facilement une accolade mal placée. Un court commentaire
//peut expliquer la raison d’une étape sans devenir une instruction exécutable. - 4DéfiCorrige la méthode d’entrée
Un fichier déclare correctement
public class Bulletin, mais sa seule méthode estpublic static void Main(String[] args). Il compile et le lanceur ne trouve pas la méthode main. Quelle modification faut-il apporter ?---reveal---
Remplace
Mainparmain. Le nom avec une majuscule déclare une méthode différente : il ne fournit donc pas le point d’entrée voulu. Le fichier doit aussi rester nomméBulletin.javapour correspondre à sa classe publique. - 5ExplicationCompile et lance le programme du message
Depuis le dossier source, saisis :
javac Notice.java java Noticejavacvérifie le code source et produit le bytecodeNotice.class.javadémarre la JVM pour exécuter cette classe. Un JDK fournit les deux commandes ; un environnement de développement intégré effectue ces étapes derrière son bouton d’exécution. Dans la commande de lancement d’une classe compilée, omets l’extension.class.java Notice.javaest une autre forme de lancement, en mode fichier source, disponible depuis Java 11. - 6DéfiLis d’abord la première erreur
Après avoir supprimé le guillemet fermant d’un message, un apprenant voit plusieurs messages du compilateur sur cette ligne et les suivantes. Faut-il réécrire immédiatement chaque instruction ultérieure ? Explique la prochaine étape.
---reveal---
Corrige la première erreur en fermant le littéral de chaîne de caractères, enregistre et recompile. Un seul guillemet non fermé peut donner l’impression que le code suivant est mal formé. Recompiler permet de voir si les messages ultérieurs disparaissent avant de devoir apporter d’autres modifications.
- 7ExempleSuis les deux premiers appels d’affichage
Remplace le message d’origine par :
System.out.print("Studio "); System.out.print(3);Le premier appel affiche le mot et l’espace qui le suit. Comme
printn’ajoute pas de retour à la ligne, le second appel place3immédiatement après cette espace. La sortie actuelle est « Studio 3 », et l’appel suivant continuerait sur cette même ligne. Les appels d’affichage n’insèrent pas de séparateurs supplémentaires. - 8ExempleTermine une ligne et commence la suivante
Poursuis le même programme avec :
System.out.println(" open"); System.out.println("Welcome");Le premier appel ajoute son espace initiale et le mot « open » à la ligne existante, puis termine cette ligne. Le second affiche « Welcome » et termine la ligne suivante. Le texte complet est :
Studio 3 open WelcomeIl n’y a pas de ligne vide entre les messages ; un
println()vide en ajouterait une. - 9Point cléLes guillemets et les séquences d’échappement déterminent le texte
Les guillemets déterminent si Java affiche du texte littéral ou évalue du code.
println("3 + 4")affiche « 3 + 4 » ;println(3 + 4)affiche 7.Pour inclure un guillemet dans un littéral, écris
\". Pour une nouvelle ligne dans un littéral, écris\n; une tabulation s’écrit\tet une barre oblique inverse\\. Les séquences d’échappement deviennent des caractères dans le texte obtenu. Un littéral ordinaire doit lui-même s’ouvrir et se fermer sur une seule ligne du code source. - 10DéfiPrévois les fins de ligne
Qu’affiche ce code ?
System.out.print("A"); System.out.println("B"); System.out.println(); System.out.print("C");---reveal---
La première ligne est « AB », la deuxième est vide et la troisième contient « C ». Le premier appel reste sur sa ligne, le suivant la termine et le
println()vide ajoute un autre retour à la ligne. Aucune espace n’apparaît entre A et B, car aucune instruction n’en affiche. - 11LienRepère l’étape de l’échec
Supposons qu’un programme de message modifié compile, démarre, puis s’arrête sur une division entière par zéro. C’est une erreur d’exécution, signalée par une exception. S’il se termine mais indique un mauvais numéro de salle, c’est une erreur de logique.
La compilation vérifie les règles de Java ; elle ne sait pas quelle salle tu avais en tête. Détermine le message attendu avant de tester et compare chaque intitulé, valeur, espace et retour à la ligne.
- 12DéfiDistingue deux corrections
Un programme ne compile d’abord pas parce qu’il manque un point-virgule à une instruction d’affichage. Après cette correction, il s’exécute mais affiche deux messages sur une seule ligne alors que deux lignes sont nécessaires. Que faut-il changer à chaque étape ?
---reveal---
Ajoute le point-virgule pour corriger l’erreur de compilation. Remplace ensuite le
printdu premier message parprintln, ou affiche un retour à la ligne à cet endroit, pour corriger la logique d’affichage. Vérifie la seconde modification en comparant la disposition obtenue à celle attendue. - 13RécapitulatifVérifie la structure, l’exécution et la sortie
Utilise la structure de la classe et de
mainpour repérer les instructions exécutables. Fais correspondre le nom de la classe publique à celui du fichier source, puis compile et lance le programme avec les commandes appropriées.Suis les appels d’affichage en repérant la position actuelle :
printreste sur la ligne,printlnpasse à la suivante. Si un résultat est incorrect, détermine si la compilation a échoué, si l’exécution s’est arrêtée ou si la sortie finale diffère de celle attendue. Chaque cas appelle une vérification différente.
2Suis les valeurs stockées et construis un message
12 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionSuis les valeurs avant de prévoir la sortie
- 2ExempleCrée deux valeurs stockées indépendantes
- 3ExempleMets à jour uniquement la destination indiquée
- 4DéfiConserve une valeur pendant un échange
- 5ConseilUtilise final et var à bon escient
- 6ExplicationChoisis un type adapté aux données
- 7ExempleLaisse l’écriture du littéral déterminer le type
- 8DéfiÉlargis avant la multiplication
- 9ExempleConstruis un message à partir du suivi
- 10DéfiDétermine quand plus signifie addition
- 11DéfiCombine une valeur copiée avec une nouvelle sortie
- 12RécapitulatifUtilise la dernière valeur et le type effectif
3Décompose une durée et calcule avec des fractions
14 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionChoisis l’opération adaptée à la question
- 2ExplicationRegroupe un calcul complet
- 3DéfiCorrige une expression de moyenne
- 4ExempleCompte les heures complètes
- 5ExempleConserve les secondes restantes après ces heures
- 6ExempleExtrais les minutes et les secondes
- 7DéfiDécompose une autre durée
- 8Point cléLa troncature se rapproche de zéro
- 9ExempleConserve la fraction d’une mesure
- 10ExplicationUtilise Math pour une racine ou une puissance
- 11DéfiChoisis la règle d’arrondi
- 12ConseilRamène la valeur à son échelle avec un diviseur décimal
- 13DéfiConserve une moyenne avant de l’arrondir
- 14RécapitulatifSuis le type et le regroupement à chaque opération
4Convertis les valeurs au bon moment
11 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDemande-toi quelle valeur atteint la conversion
- 2ExplicationEffectue automatiquement une conversion numérique élargissante
- 3ExempleCompare deux positions de transtypage
- 4DéfiConvertis et arrondis une valeur négative
- 5ConseilNe considère pas un transtypage comme une vérification de plage
- 6ExempleAnalyse avant d’additionner
- 7ExplicationChoisis la méthode d’analyse adaptée au texte
- 8DéfiPrévois les résultats de l’analyse
- 9LienPrépare du texte pour l’affichage
- 10DéfiSuis toute la chaîne de conversion
- 11RécapitulatifChoisis une conversion adaptée à son rôle
5Lis, calcule, formate et teste
16 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionConstruis un programme autour de ses données
- 2ExplicationRelie un Scanner aux entrées au clavier
- 3ExempleLis un intitulé sous forme de ligne entière
- 4ExempleAnalyse les lignes numériques de façon cohérente
- 5DéfiCorrige un intitulé sauté
- 6ConseilFixe explicitement les conventions de saisie numérique
- 7ExempleCalcule avec les types prévus
- 8ExplicationFais correspondre la chaîne de format aux valeurs
- 9ExempleAffiche une mesure arrondie
- 10DéfiCorrige le spécificateur
- 11ExempleStocke ou aligne du texte formaté
- 12ExplicationChoisis les tests avant l’exécution
- 13DéfiTrouve un bogue de calcul à l’aide d’un test
- 14ConseilSuis la première valeur inattendue
- 15DéfiApplique le plan à une vitesse
- 16RécapitulatifVérifie tout le parcours, de l’entrée au texte
Premiers programmes Java : QCM
Série 1 : Lis et suis l’exécution de ton premier code Java10 Questions Pratiques
Question 1 sur 10
public class TrailLog. Quel doit être le nom de son fichier source ?Afficher la réponseMasquer la réponse
.java. TrailLog.java conserve les deux majuscules de TrailLog. L’extension .class appartient au bytecode compilé : nommer le fichier source TrailLog.class confondrait le fichier d’entrée avec la sortie du compilateur.Question 2 sur 10
javac Desk.java réussit. Quelle commande de terminal lance la classe compilée ?Afficher la réponseMasquer la réponse
java Desk. Ajouter .class ne désigne pas correctement la classe pour le lanceur. javac compile le code source ; il n’exécute pas le programme, et la casse du nom de la classe doit rester inchangée.Question 3 sur 10
Quel texte exact est affiché, si / représente un retour à la ligne ?
System.out.print("Gate ");
System.out.println(4);
System.out.print("Open");
Afficher la réponseMasquer la réponse
print("Gate ") laisse la position après son espace : println(4) termine donc la première ligne sous la forme « Gate 4 », puis ajoute un retour à la ligne. Le dernier appel affiche « Open » sur la ligne suivante. Tout réunir sous la forme « Gate 4Open » omet le retour à la ligne ajouté par println.Question 4 sur 10
Quelle valeur saved contient-il après ces instructions ?
int stock = 8;
int saved = stock;
stock = stock + 6;
Afficher la réponseMasquer la réponse
stock dans saved. La mise à jour ultérieure de stock ne modifie que stock : saved reste donc à 8. Attendre 14 revient à considérer l’affectation comme un lien permanent entre les variables, alors que Java a copié une valeur à un instant donné.Question 5 sur 10
4.25 un littéral float en Java ?Afficher la réponseMasquer la réponse
f donne au littéral le type float, comme dans 4.25f. Sans suffixe, un littéral décimal comme 4.25 est de type double, même si la valeur tiendrait dans un float. L marque un littéral entier long et ne peut pas faire de ce nombre décimal un float.Question 6 sur 10
System.out.println("Seats: " + 6 + 2); ?Afficher la réponseMasquer la réponse
6 + 2 entre parenthèses afin d’additionner les nombres avant la concaténation.Question 7 sur 10
int result = 18 - 6 / 3 * 2; ?Afficher la réponseMasquer la réponse
6 / 3 donne 2, la multiplication par 2 donne 4 et la soustraction de ce résultat à 18 donne 14. Obtenir 16 revient à traiter 3 * 2 comme le dénominateur, alors qu’aucune parenthèse ne les regroupe.Question 8 sur 10
-11 / 4 ?Afficher la réponseMasquer la réponse
Question 9 sur 10
int total = 19; int groups = 4;, quelle expression donne un quotient fractionnaire ?Afficher la réponseMasquer la réponse
total avant la division donne à un opérande le type double : la division donne donc 4,75. Transtyper l’expression total / groups après son évaluation ne donne que 4,0, car la division entière a supprimé la fraction. Transtyper le résultat décimal final en int ferait aussi perdre cette fraction.Question 10 sur 10
Un Scanner reçoit « 27 », Entrée, « Mina Chen », Entrée. Qu’affiche ce code ?
int age = scanner.nextInt();
scanner.nextLine();
String first = scanner.next();
String rest = scanner.nextLine();
System.out.println(age + ":" + first + ":" + rest);
Afficher la réponseMasquer la réponse
nextLine() supplémentaire consomme le reste vide après 27. next() lit ensuite « Mina » et la dernière lecture de ligne conserve l’espace avant « Chen », ce qui produit « 27:Mina: Chen ». Omettre cette espace dans la prévision revient à traiter à tort nextLine() comme une lecture de jeton qui ignore les caractères blancs.Série 2 : Choisis les types et relie l’entrée à la sortie10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
4.0 pour double average = 19 / 4;. Quel type d’erreur explique cette moyenne inexacte ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Que valent left et right après cette tentative d’échange ?
int left = 2;
int right = 7;
left = right;
right = left;
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Math.floor(-4.2) renvoie-t-il ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
String quantity = "16"; Quelle expression produit l’entier 21 à partir de ce texte ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
System.out.printf("Mass: %.2f kg%n", 6.375); affiche-t-il avant son retour à la ligne ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
int km = 45; int minutes = 50; double speed = km / minutes * 60;. Il affiche zéro. Quel remplacement calcule la vitesse en km/h tout en conservant les entrées ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Suis les calculs et les résultats formatés10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Path: C:\Work avec exactement une barre oblique inverse ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
System.out.println(3 + 4 + " / " + 3 * 4); ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Quelle valeur est affichée ?
int value = 20;
value -= 3 * 2;
value /= 4;
System.out.println(value);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
double value = Math.round(8.276 * 100) / 100; ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
(int) -6.8 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Integer.parseInt(" 58") est évalué ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
L’entrée est « Lina Park » suivie d’Entrée. Quelle String rest reçoit-il ?
String first = scanner.next();
String rest = scanner.nextLine();
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
System.out.printf("[%4d][%-5s]", 7, "Oak"); ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
int seconds = 7_489;. Quelle paire d’expressions donne les heures complètes et les minutes entières restantes dans l’heure en cours ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Trouve la première étape incorrecte10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
System.out.println("Ready") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
var count = 6;, que se passe-t-il lorsque la même méthode exécute count = 6.5; ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
int edge = 70_000; long area = edge * edge;. L’aire stockée est incorrecte. Quel remplacement calcule le produit entier exact en laissant edge de type int ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Qu’affiche ce code ?
int width = 12;
int height = 7;
int total = 2 * (width + height);
total -= 5;
double part = total / 4;
System.out.println(part);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Math.sqrt(5 * 5 + 12 * 12) renvoie-t-il ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Qu’est-ce qui est affiché ?
int value = 9;
value += 2.8;
double result = value / 4;
System.out.println(result);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Boolean.parseBoolean("Yes") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
minutes = totalSeconds / 60; seconds = totalSeconds;. Quelle correction répare le calcul ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Locale.US et lit deux lignes avec double mass = scanner.nextDouble(); String label = scanner.nextLine();. L’entrée est « 2.75 », Entrée, « Sample B », Entrée. Quelle modification conserve les deux valeurs voulues ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 5 : Combine les règles dans des suivis de programmes complets10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Qu’affiche ce code ?
int a = 4;
int b = 7;
String text = "R=" + a + b;
a += 2;
text += ":" + (a + b);
System.out.println(text);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Quelle valeur est affichée ?
int number = 6_843;
int last = number % 10;
number /= 10;
int next = number % 10;
System.out.println(last * 10 + next);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
'E' le résultat de l’ajout de 2 au code du caractère 'C' ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Qu’affiche ce code ?
int total = 23;
int count = 4;
double a = (double) (total / count);
double b = (double) total / count;
System.out.println((int) (b - a) + ":" + b);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Un Scanner utilisant Locale.US reçoit « 3 2.5 », Entrée, « West Lab », Entrée. Quelles valeurs name et full reçoivent-ils ?
int count = scanner.nextInt();
double mass = scanner.nextDouble();
String name = scanner.nextLine();
String full = scanner.nextLine();
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Avec un formatage américain, quel texte est stocké dans line ?
String line = String.format("%d%% / %.1f", 25, 4.25);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
scanner est prêt et Locale est importé.Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
Affectation
count = count + 2;, count contient deux de plus que la valeur qu’il contenait avant cette instruction.Affectation composée
total += 5; augmente un total int de 5 et stocke la valeur mise à jour dans total.Analyse syntaxique
Approximation en virgule flottante
1.1 * 3 révèlent une approximation en virgule flottante.Arrondi
B
Bloc
boolean
boolean isMember = true; stocke une valeur de vérité sans utiliser de guillemets ni de nombre.Bytecode
.class et exécutée par une machine virtuelle Java adaptée.java peut exécuter à l’aide de la JVM.C
Cas de test
Chaîne de format
"Mass: %.2f kg%n" place une mesure à deux décimales entre son intitulé et son unité.Chaîne vide
"" + 'A' + 'B' fait construire du texte par les additions et donne la String « AB ».char
'7' a pour code 55 : le stocker en char n’en fait donc pas la valeur entière 7.Classe
public class Greeting ouvre la classe qui contient la méthode main du programme.Classe Math
Math.sqrt(81) trouve une racine carrée sans nécessiter d’importation ni de définition de méthode.Code source
.java avant que le compilateur ne le traduise pour l’exécution.Commentaire
// ou entre /* et */.// Convert to minutes explique pourquoi un calcul de durée multiplie une valeur en heures par 60.Compilateur
javac Notice.java appelle le compilateur, qui signale une erreur si un point-virgule manque.Concaténation
"Count: " + 8 construit un message contenant un intitulé, une espace et un chiffre.Constante
final peut recevoir une valeur une seule fois et ne peut pas ensuite être réaffectée.MINUTES_PER_HOUR donne un nom utile au nombre 60 dans les calculs de conversion de durées.Conversion élargissante
Conversion réductrice
D
Déclaration
int count; introduit un nom, mais count doit encore recevoir une valeur avant d’être lu.Décrémentation
-- effectue cette mise à jour sans affectation par soustraction distincte.secondsLeft--; diminue exactement d’une unité le nombre stocké de secondes restantes.Dépassement de capacité d’un entier
Dividende
/ ou de % dans une expression Java de division à deux opérandes.-11 % 4, le dividende négatif explique pourquoi le reste non nul est lui aussi négatif.Division entière
23 / 5 donne 4 groupes complets et exclut la fraction du quotient.double
Double.parseDouble
E
Erreur d’exécution
Erreur de compilation
Erreur de logique
Expression
width * height calcule une aire qui peut être affectée ou transmise à un appel d’affichage.F
float
f dans 2.75f indique un littéral float, tandis que 2.75 seul est un littéral double.I
Incrémentation
++ effectue cette mise à jour en une seule instruction.count++; fait passer un effectif stocké de 8 à 9 avant l’exécution de l’instruction suivante.Initialisation
double speed = 72.5; déclare speed et l’initialise avec une mesure en km/h.InputMismatchException
nextInt() provoque une InputMismatchException, car un entier est attendu.Instruction
System.out.println("Ready"); est une instruction qui affiche un message et un retour à la ligne.int
int, mais un effectif supérieur à son maximum nécessite un type entier plus grand.Integer.parseInt
Integer.parseInt("72") renvoie 72, mais ajouter une espace initiale rend ce texte entier invalide.J
JDK
javac et java.Jeton
nextInt() peuvent lire.L
Largeur de champ
%4d produit trois espaces avant le chiffre pour remplir le champ de quatre caractères.Littéral
8, 8L et 8.0 expriment des quantités semblables, mais sont de types int, long et double.Littéral de chaîne de caractères
"Hello, team" contient une virgule et une espace qui apparaissent exactement ainsi dans la sortie.long
5_000_000_000L crée un littéral qui peut initialiser un grand nombre entier.M
Machine virtuelle Java (JVM)
Méthode main
main fait apparaître leurs messages dans l’ordre où elles sont écrites.N
NaN
0.0 / 0 produit NaN au lieu de lever une exception de division entière.nextLine
nextLine() peut renvoyer immédiatement une String vide.Notation scientifique
E dans les valeurs affichées par Java.1.0E-4 représente 0,0001 : l’exposant négatif indique donc une petite grandeur.NumberFormatException
Integer.parseInt provoque une NumberFormatException pendant l’exécution.O
Opérande
"N=" + count, l’opérande String fait que le signe plus assemble du texte au lieu d’additionner deux nombres.P
Paramètres régionaux
Locale.US rend les entrées décimales avec un point cohérentes sur différents ordinateurs.Partie entière inférieure
Partie entière supérieure
Précision
Précision du formatage
%f, elle fixe le nombre de chiffres après le séparateur décimal.%.2f transforme 4,5 en « 4.50 » à l’affichage sans modifier la variable numérique.print("Name: ") permet à un utilisateur de saisir une réponse directement à côté de l’invite à l’écran.printf
printf("%d items%n", 8) affiche l’effectif, le mot « items » et un séparateur de ligne final.println
println affichent deux lignes distinctes même lorsque leurs littéraux ne contiennent aucun caractère de nouvelle ligne.Priorité des opérateurs
4 + 3 * 2 : le produit est donc calculé en premier.R
Reste
% donne un résultat non nul du signe du dividende.23 % 5 donne les 3 pièces hors des groupes complets.S
Scanner
System.in peut lire le nom d’un utilisateur et les mesures nécessaires à un programme.Schéma entrée–traitement–sortie
Séquence d’échappement
permet à un seul appel d’affichage de placer la partie suivante de son message sur une autre ligne.Sortie attendue
Spécificateur de format
%d pour un entier ou %n pour un retour à la ligne.%f consomme une valeur en virgule flottante, tandis que %n ajoute un séparateur de ligne sans consommer de valeur.String
"".String.format
String.format(Locale.US, "%.1f km", 8.25) et afficher ce texte plus tard.T
Tableau de suivi d’exécution
Transtypage (cast)
(double) total / count, le transtypage change le type d’un opérande avant que la division soit effectuée.Troncature
Type primitif
int utilise un type primitif, tandis qu’un nom stocké en String utilise un type classe.V
Valeur intermédiaire
Variable
distanceKm stocke une mesure qu’un calcul ultérieur de durée divise par une vitesse.- 1Premiers programmes Java
- 2Conditions et boucles en Java
- 3Méthodes Java
- 4Listes et tableaux en Java
- 5Classes et objets en Java
- 6Références et égalité en Java
- 7HashMap et collections en Java
- 8Héritage et polymorphisme en Java
- 9Exceptions et fichiers en Java
- 10Paquetages et tests unitaires Java
- 11Généricité et flux en Java
À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.