Cours de Programmation Java
Cours de Programmation Java
Entrée/Sortie et Opérateurs
2.1 Présentation
Ce chapitre présente la programmation Java. Nous commençons par des exemples de
programmes qui affichent (sortent) des messages à l'écran. Nous présentons ensuite un
programme qui obtient (entre) deux nombres d'un utilisateur, calcule leur somme et
affiche le résultat. Vous apprendrez à demander à l'ordinateur d'effectuer des calculs
arithmétiques et d'enregistrer leurs résultats pour une utilisation ultérieure.
Le dernier exemple montre comment prendre des décisions. L'application compare
deux nombres, puis affiche des messages indiquant les résultats de la comparaison.
Vous utiliserez les outils de ligne de commande du JDK pour compiler et exécuter les
programmes de ce chapitre. Si vous préférez utiliser un environnement de
développement intégré (IDE), nous avons également publié des vidéos de démarrage
sur
[Link]
pour les trois IDE Java les plus populaires : Eclipse, NetBeans et IntelliJ IDEA.
2.2 Votre premier programme en Java : imprimer une ligne de texte
Une application Java est un programme informatique qui s'exécute lorsque vous utilisez
la commande java pour lancer la machine virtuelle Java (JVM). Les sections 2.2.1 à 2.2.2
expliquent comment compiler et exécuter une application Java. Considérons d'abord
une application simple qui affiche une ligne de texte. La figure 2.1 montre le programme
suivi d'une boîte qui affiche sa sortie.
1 // Fig. 2.1: [Link]
2 // Text-printing program.
3
4 public class Welcome1 {
5 // main method begins execution of Java application
6 public static void main(String[] args) {
7 [Link]("Welcome to Java Programming!");
8 } // end method main
9 } // end class Welcome1
Fig. 2.1 | Programme d’impression de texte. (Part 1 of 2.)
1
Nous utilisons les numéros de ligne à des fins pédagogiques - ils ne font pas partie d'un
programme Java.
Cet exemple illustre plusieurs fonctionnalités Java importantes. Nous verrons que la
ligne 7 fait le travail en affichant la phrase "Bienvenue dans la programmation Java!"
sur l'écran.
Commenter vos programmes
Nous insérons des commentaires pour documenter les programmes et améliorer leur
lisibilité. Le compilateur Java ignore les commentaires, de sorte qu'ils n'entraînent
aucune action de l'ordinateur lors de l'exécution du programme.
Par convention, nous commençons chaque programme par un commentaire indiquant
le numéro de la figure et le nom du fichier du programme. Le commentaire de la ligne
1
// Fig. 2.1: [Link]
commence par //, indiquant qu'il s'agit d'un commentaire de fin de ligne - il se
termine à la fin de la ligne sur laquelle le // apparaît. Un commentaire de fin de ligne
n'a pas besoin de commencer une ligne ; il peut également commencer au milieu d'une
ligne et continuer jusqu'à la fin (comme dans les lignes 5, 8 et 9). La ligne 2,
// Text-printing program.
2
Java préféré dans l'industrie. Le programme utilitaire javadoc (qui fait partie du JDK)
lit les commentaires Javadoc et les utilise pour préparer la documentation du
programme au format de page Web HTML5. Nous utilisons // des commentaires tout
au long de notre code, plutôt que des commentaires traditionnels ou Javadoc, pour
économiser de l'espace. Nous démontrons les commentaires Javadoc et l'utilitaire
javadoc dans l'annexe G en ligne, Création de documentation avec javadoc.
Erreur courante de programmation 2.1
Oublier l'un des délimiteurs d'un commentaire traditionnel ou Javadoc est une erreur de
syntaxe. Une erreur de syntaxe se produit lorsque le compilateur rencontre un code qui
viole les règles du langage Java (c'est-à-dire sa syntaxe). Ces règles sont similaires aux
règles de grammaire en langage naturel spécifiant la structure des phrases, telles que celles
en anglais, français, espagnol, etc. Les erreurs de syntaxe sont également appelées erreurs
de compilation, erreurs de compilation ou erreurs de compilation, car le compilateur les
détecte lors de la compilation du programme. Lorsqu'une erreur de syntaxe est rencontrée,
le compilateur émet un message d'erreur. Vous devez éliminer toutes les erreurs de
compilation avant que votre programme ne se compile correctement
Bonne pratique de programmation 2.1
Certaines organisations exigent que chaque programme commence par un commentaire
indiquant le but du programme et l'auteur, la date et l'heure de la dernière modification
du programme.
Utiliser des lignes vides
Les lignes vides (comme la ligne 3), les caractères d'espacement et les tabulations
peuvent faciliter la lecture des programmes. Ensemble, ils sont connus sous le nom
d'espace blanc. Le compilateur ignore les espaces blancs.
Bonne pratique de programmation 2.2
Utilisez des espaces blancs pour améliorer la lisibilité du programme.
Déclarer une classe
public class Welcome1 {
3
Les mots-clés sont réservés à une utilisation par Java et sont orthographiés avec toutes
les lettres minuscules. La liste complète des mots clés est présentée à l'annexe C.
Dans les chapitres 2 à 7, chaque classe que nous définissons commence par le mot-clé
public. Pour l'instant, nous l'exigeons simplement. Vous en apprendrez plus sur les
classes publiques et non publiques au chapitre 8.
Nom de fichier pour une classe publique
Une classe publique doit être placée dans un fichier dont le nom se présente sous la
forme [Link], de sorte que la classe Welcome1 est stockée dans le fichier
[Link].
Erreur de programmation commune 2.2
Une erreur de compilation se produit si le nom de fichier d'une classe publique n'est pas
exactement le même nom que la classe (en termes d'orthographe et de casse) suivi de
l'extension .java.
Noms de classe et identificateurs
Par convention, les noms de classe commencent par une lettre majuscule et mettent en
majuscule la première lettre de chaque mot qu'ils incluent (par exemple,
SampleClassName). Un nom de classe est un identifiant—une série de caractères
composée de lettres, de chiffres, de traits de soulignement (_) et de signes dollar ($) qui
ne commence pas par un chiffre et ne contient pas d'espaces. Certains identifiants
valides sont Welcome1, $value, _value, m_inputField1 et button7. Le nom 7button n'est
pas un identifiant valide car il commence par un chiffre, et le champ de saisie du nom
n'est pas un identifiant valide car il contient un espace. Normalement, un identifiant qui
ne commence pas par une majuscule n'est pas un nom de classe. Java est sensible à la
casse - les lettres majuscules et minuscules sont distinctes - donc la valeur et la valeur
sont des identifiants différents (mais tous deux valides)
Bonne pratique de programmation 2.3
Par convention, chaque mot d'un identificateur de nom de classe commence par une lettre
majuscule. Par exemple, l'identifiant de nom de classe DollarAmount commence son
premier mot, Dollar, par un D majuscule et son deuxième mot, Montant, par un A
majuscule. Cette convention de dénomination est connue sous le nom de casse camel, car les
lettres majuscules se détachent comme celles d'un chameau. bosses.
4
Soulignement (_) dans Java 9
Depuis Java 9, vous ne pouvez plus utiliser un trait de soulignement (_) seul comme
identifiant.
Corps de classe
Une accolade gauche (à la fin de la ligne 4), {, commence le corps de chaque déclaration
de classe. Une accolade droite correspondante (à la ligne 9), }, doit terminer chaque
déclaration de classe. Les lignes 5 à 8 sont en retrait.
Bonne pratique de programmation 2.4
Indentez le corps entier de chaque déclaration de classe d'un "niveau" entre les accolades
qui délimitent la classe. Ce format met l'accent sur la structure de la déclaration de classe
et facilite sa lecture. Nous utilisons trois espaces pour former un niveau d'indentation - de
nombreux programmeurs préfèrent deux ou quatre espaces. Quoi que vous choisissiez,
utilisez-le systématiquement.
5
Déclarer une méthode
// la méthode principale commence l'exécution de l'application Java
est le point de départ de toute application Java. Les parenthèses après l'identifiant main
indiquent qu'il s'agit d'un bloc de construction de programme appelé une méthode. Les
déclarations de classe Java contiennent normalement une ou plusieurs méthodes. Pour
une application Java, une des méthodes doit s'appeler main et être définie comme à la
ligne 6 ; sinon, le programme ne s'exécutera pas.
Les méthodes exécutent des tâches et peuvent renvoyer des informations lorsqu'elles
terminent leurs tâches. Nous expliquerons le but du mot-clé statique dans la section
3.2.5. Le mot-clé void indique que cette méthode ne renverra aucune information. Plus
tard, nous verrons comment une méthode peut renvoyer des informations. Pour
l'instant, imitez simplement la première ligne de main dans vos programmes. Les
arguments String[] entre parenthèses sont une partie obligatoire de la déclaration de
main - nous en discuterons au chapitre 7. L'accolade gauche à la fin de la ligne 6
commence le corps de la déclaration de la méthode. Une accolade droite
correspondante la termine (ligne 8). La ligne 7 est en retrait entre les accolades.
Bonne pratique de programmation 2.6
Indentez le corps entier de chaque déclaration de méthode d'un "niveau" entre les accolades
qui définissent le corps de la méthode. Cela met l'accent sur la structure de la méthode et
la rend plus facile à lire.
6
L'objet [Link], qui est prédéfini pour vous, est appelé objet de sortie standard.
Il permet à un programme d'afficher des informations dans la fenêtre de commande
à partir de laquelle le programme s'exécute. Dans Microsoft Windows, la fenêtre de
commande est l'invite de commande. Sous UNIX/Linux/macOS, la fenêtre de
commande est appelée un terminal ou un shell. De nombreux programmeurs
l'appellent simplement la ligne de commande.
La méthode [Link] affiche (ou imprime) une ligne de texte dans la fenêtre
de commande. La chaîne entre parenthèses à la ligne 7 est l'argument de la méthode.
Lorsque [Link] termine sa tâche, il positionne le curseur de sortie
(l'emplacement où le caractère suivant sera affiché) au début de la ligne suivante dans la
fenêtre de commande. Ceci est similaire à ce qui se passe lorsque vous appuyez sur la
touche Entrée tout en tapant dans un éditeur de texte : le curseur apparaît au début de
la ligne suivante dans le document.
La ligne entière 7, y compris [Link], l'argument "Welcome to Java
Programming!" entre parenthèses et le point-virgule (;), s'appelle une instruction. Une
méthode contient généralement des instructions qui exécutent sa tâche. La plupart des
instructions se terminent par un point-virgule.
Utilisation des commentaires de fin de ligne sur les accolades droites pour la
lisibilité
Pour aider les novices en programmation, nous incluons un commentaire de fin de ligne
après une accolade fermante qui termine une déclaration de méthode et après une
accolade fermante qui termine une déclaration de classe.
Par exemple, la ligne 8
} // end method main
indique l'accolade fermante de la méthode main, et la ligne 9
} // end class Welcome1
indique l'accolade fermante de la classe Welcome1. Chaque commentaire indique la
méthode ou la classe à laquelle l'accolade droite se termine. Nous omettrons ces
commentaires de fin après ce chapitre.
2.2.1 Compilation de la demande
Nous sommes maintenant prêts à compiler et exécuter le programme. Nous supposons
que vous utilisez les outils de ligne de commande du kit de développement Java, pas un
IDE. Les instructions suivantes supposent que les exemples du livre se trouvent dans
7
c:\examples sous Windows ou dans le dossier Documents/examples de votre compte
utilisateur sous Linux/macOS.
Pour préparer la compilation du programme, ouvrez une fenêtre de commande et
accédez au répertoire dans lequel le programme est stocké. De nombreux systèmes
d'exploitation utilisent la commande cd pour changer de répertoire (ou de dossier). Sous
Windows, par exemple
cd c:\examples\ch02\fig02_01
8
été signalée. Si vous ne trouvez pas d'erreur sur cette ligne, vérifiez plusieurs lignes
précédentes.
Chaque message d'erreur de compilation contient le nom du fichier et le numéro de
ligne où l'erreur s'est produite. Par exemple, [Link] indique qu'une erreur s'est
produite à la ligne 6 dans [Link]. Le reste du message fournit des informations
sur l'erreur de syntaxe.
2.2.2 Exécution de la demande
Maintenant que vous avez compilé le programme, tapez la commande suivante et
appuyez sur Entrée :
java Welcome1
pour lancer la JVM et charger le fichier [Link]. La commande omet l'extension
de nom de fichier .class ; sinon, la JVM n'exécutera pas le programme. La JVM appelle
la méthode principale de Welcome1. Ensuite, la ligne 7 de l'écran principal affiche
"Welcome to Java Programming!".
La figure 2.2 montre le programme s'exécutant dans une fenêtre d'invite de commande
Microsoft Windows. [Remarque : de nombreux environnements affichent des fenêtres
de commande avec des arrière-plans noirs et du texte blanc. Nous avons ajusté ces
paramètres pour rendre nos captures d'écran plus lisibles.]
Conseil de prévention des erreurs 2.3
Lorsque vous tentez d'exécuter un programme Java, si vous recevez un message tel que
"Exception dans le thread "main" [Link]: Welcome1", votre
variable d'environnement CLASSPATH n'a pas été définie correctement. Veuillez lire
attentivement les instructions d'installation dans la section Avant de commencer de ce
manuel. Sur certains systèmes, vous devrez peut-être redémarrer votre ordinateur ou ouvrir
une nouvelle fenêtre de commande après avoir configuré le CLASSPATH.
9
2.3 Modification de votre premier programme Java
Dans cette section, nous modifions l'exemple de la Fig. 2.1 pour imprimer du texte sur
une ligne en utilisant plusieurs instructions et pour imprimer du texte sur plusieurs
lignes en utilisant une seule instruction.
Affichage d'une seule ligne de texte avec plusieurs instructions
Bienvenue dans la programmation Java ! peut être affiché de plusieurs manières. La
classe Welcome2, illustrée à la Fig. 2.3, utilise deux instructions (lignes 7–8) pour
produire la sortie illustrée à la Fig. 2.1. [Remarque : À partir de maintenant, nous
mettons en évidence avec un fond jaune les nouvelles fonctionnalités clés de chaque
liste de codes, comme nous l'avons fait pour les lignes 7 à 8.]
1 // Fig. 2.3: [Link]
2 // Printing a line of text with multiple statements.
3
4 public class Welcome2 {
5 // main method begins execution of Java application
6 public static void main(String[] args) {
7 [Link]("Welcome to ");
8 [Link]("Java Programming!");
9 } // end method main
10 } // end class Welcome2
Welcome to Java Programming!
Fig. 2.3 | Affichage d'une seule ligne de texte avec plusieurs instructions.
Le programme est similaire à la Fig. 2.1, nous n'abordons donc que les changements ici.
Ligne 2
// Printing a line of text with multiple statements.
est un commentaire de fin de ligne indiquant le but du programme. La ligne 4
commence la déclaration de classe Welcome2. Lignes 7–8 dans method main
[Link]("Welcome to ");
[Link]("Java Programming!");
10
les caractères. Contrairement à println, après avoir affiché son argument, print ne
positionne pas le curseur de sortie au début de la ligne suivante — le prochain caractère
affiché par le programme apparaîtra immédiatement après le dernier caractère affiché
par print. Ainsi, la ligne 8 positionne le premier caractère de son argument (la lettre "J")
immédiatement après le dernier caractère affiché par la ligne 7 (le caractère espace avant
le guillemet double de fermeture de la chaîne).
Affichage de plusieurs lignes de texte avec une seule instruction
Une seule instruction peut afficher plusieurs lignes en utilisant des caractères de retour
à la ligne (\n), qui indiquent aux méthodes print et println de [Link] quand
positionner le curseur de sortie au début de la ligne suivante dans la fenêtre de
commande. Comme les lignes vides, les caractères d'espacement et les caractères de
tabulation, les caractères de retour à la ligne sont des caractères d'espacement. Le
programme de la Fig. 2.4 génère quatre lignes de texte, en utilisant des caractères de
saut de ligne pour déterminer quand commencer chaque nouvelle ligne. La majeure
partie du programme est identique à ceux des Fig. 2.1 et 2.3.
1 // Fig. 2.4: [Link]
2 // Printing multiple lines of text with a single statement.
3
4 public class Welcome3 {
5 // main method begins execution of Java application
6 public static void main(String[] args) {
7 [Link]("Welcome\nto\nJava\nProgramming!");
8 } // end method main
9 } // end class Welcome3
Welcome
to
Java
Programming!
Fig. 2.4 | Impression de plusieurs lignes de texte avec une seule instruction .
Ligne 7
[Link]("Welcome\nto\nJava\nProgramming!");
affiche quatre lignes de texte dans la fenêtre de commande. Normalement, les caractères
d'une chaîne sont affichés exactement tels qu'ils apparaissent entre guillemets doubles.
Cependant, les caractères appariés \ et n (répétés trois fois dans l'instruction)
n'apparaissent pas à l'écran. La barre oblique inverse (\) est un caractère
11
d'échappement, qui a une signification particulière pour les méthodes print et println
de [Link]. Lorsqu'une barre oblique inverse apparaît dans une chaîne, Java la
combine avec le caractère suivant pour former une séquence d'échappement—\n
représente le caractère de retour à la ligne. Lorsqu'un caractère de nouvelle ligne apparaît
dans une chaîne en cours de sortie avec [Link], le caractère de nouvelle ligne
déplace le curseur de sortie de l'écran au début de la ligne suivante dans la fenêtre de
commande.
La figure 2.5 répertorie plusieurs séquences d'échappement et décrit comment elles
affectent l'affichage des caractères dans la fenêtre de commande. Pour la liste complète
des séquences d'échappement, visitez
[Link] 3.10.6
séquence Description
d'échappement
\n Nouvelle ligne. Positionnez le curseur à l'écran au début de la ligne
suivante.
\t Onglet horizontal. Déplacez le curseur à l'écran jusqu'au taquet de
tabulation suivant.
\r Retour chariot. Positionnez le curseur à l'écran au début de la ligne
en cours—n'avancez pas à la ligne suivante. Tous les caractères
sortis après le retour chariot écrasent les caractères précédemment
sortis sur cette ligne.
\\ Barre oblique inverse. Utilisé pour imprimer un caractère barre
oblique inverse.
\" Double citation. Utilisé pour imprimer un caractère de guillemet
double. Par exemple,
[Link]("\"in quotes\"");
affiche " in quotes ".
Fig. 2.5 | Quelques séquences d'échappement courantes.
12
4 public class Welcome4 {
5 // main method begins execution of Java application
6 public static void main(String[] args) {
7 [Link]("%s%n%s%n", "Welcome to", "Java
Programming!");
8 } // end method main
9 } // end class Welcome4
Welcome to
Java Programming!
Ligne 7
[Link]("%s%n%s%n", "Welcome to", "Java Programming!");
13
le premier %s et "Java Programming!" pour le deuxième %s. La sortie montre que deux
lignes de texte sont affichées sur deux lignes.
Notez qu'au lieu d'utiliser la séquence d'échappement \n, nous avons utilisé le
spécificateur de format %n, qui est un séparateur de ligne portable sur tous les systèmes
d'exploitation. Vous ne pouvez pas utiliser %n dans l'argument de [Link] ou
[Link] ; cependant, le séparateur de lignes généré par [Link]
après avoir affiché son argument est portable sur tous les systèmes d'exploitation.
L'annexe I en ligne présente plus de détails sur le formatage de la sortie avec printf.
14
18
19 [Link]("Sum is %d%n", sum); // display sum
20 } // end method main
} // end class Addition
Enter first integer: 45
Enter second integer: 72
Sum is 117
Fig. 2.7 | Programme d'addition qui entre deux nombres puis affiche leur somme.
15
2.5.2 Déclarer et créer un objet Scanner pour obtenir une entrée utilisateur à
partir du clavier
Une variable est un emplacement dans la mémoire de l'ordinateur où une valeur peut
être stockée pour une utilisation ultérieure dans un programme. Toutes les variables
Java doivent être déclarées avec un nom et un type avant de pouvoir être utilisées. Le
nom d'une variable permet au programme d'accéder à la valeur de la variable en
mémoire. Un nom de variable peut être n'importe quel identificateur valide—encore
une fois, une série de caractères composés de lettres, de chiffres, de traits de
soulignement (_) et de signes dollar ($) qui ne commencent pas par un chiffre et ne
contiennent pas d'espaces. Le type d'une variable spécifie le type d'informations
stockées à cet emplacement en mémoire. Comme les autres instructions, les instructions
de déclaration se terminent par un point-virgule (;).
Ligne 9 de la méthode main
Scanner input = new Scanner([Link]);
est une instruction de déclaration de variable qui spécifie le nom (entrée) et le type
(Scanner) d'une variable utilisée dans ce programme. Un scanner (package [Link])
permet à un programme de lire des données (par exemple, des nombres et des chaînes)
à utiliser dans un programme. Les données peuvent provenir de nombreuses sources,
telles que l'utilisateur au clavier ou un fichier sur disque. Avant d'utiliser un scanner,
vous devez le créer et spécifier la source des données.
Le = à la ligne 9 indique que l'entrée de la variable Scanner doit être initialisée (c'est-
à-dire préparée pour être utilisée dans le programme) dans sa déclaration avec le résultat
de l'expression à droite
du signe égal—new Scanner([Link]). Cette expression utilise le nouveau mot-clé
pour créer un objet Scanner qui lit les caractères tapés par l'utilisateur au clavier. L'objet
d'entrée standard, [Link], permet aux applications de lire des octets de données
saisis par l'utilisateur. Le scanner traduit ces octets en types (comme ints) qui peuvent
être utilisés dans un programme.
Bonne pratique de programmation 2.8
Le choix des noms de variables significatifs aide à auto-documenter un programme (c'est-
à-dire que l'on peut comprendre le programme simplement en le lisant plutôt qu'en lisant
la documentation associée ou en créant et en visionnant un nombre excessif de
commentaires).
16
Bonne pratique de programmation 2.9
Par convention, les identificateurs de noms variables utilisent la convention de dénomination
Camel-case avec une première lettre en minuscules - par exemple, firstNumber.
2.5.3 Inviter l'utilisateur à entrer des données
Ligne 11
[Link]("Enter first integer: "); // prompt
utilise [Link] pour afficher le message "Entrez le premier entier : ". Ce
message est appelé une invite ou prompt car il demande à l'utilisateur d'effectuer une
action spécifique. Nous utilisons ici la méthode print plutôt que println afin que l'entrée
de l'utilisateur apparaisse sur la même ligne que l'invite. Rappelez-vous de la section 2.2
que les identifiants commençant par des lettres majuscules représentent généralement
des noms de classe. Le système de classe fait partie du package [Link].
Observation de Génie Logiciel 2.1
Par défaut, le package [Link] est importé dans chaque programme Java ; ainsi, les
classes de [Link] sont les seules de l'API Java qui ne nécessitent pas de déclaration
d'importation.
2.5.4 Déclarer une variable pour obtenir un entier à partir du clavier et le
stocker
L'instruction de déclaration de variable à la ligne 12
int number1 = [Link](); // read first number from user
déclare que la variable number1 contient des données de type int, c'est-à-dire des valeurs
entières, qui sont des nombres entiers tels que 72, –1127 et 0. La plage de valeurs pour
un int est de –2 147 483 648 à +2 147 483 647. Les valeurs int que vous utilisez dans
un programme ne doivent pas contenir de virgules ; cependant, pour plus de lisibilité,
vous pouvez placer des traits de soulignement dans les nombres. Donc 60_000_000
représente la valeur int 60 000 000.
Certains autres types de données sont float et double, pour contenir des nombres réels,
et char, pour contenir des données de caractères. Les nombres réels contiennent des
points décimaux, comme dans 3.4, 0.0 et –11.19. Les variables de type char représentent
des caractères individuels, comme une lettre majuscule (par exemple, A), un chiffre (par
exemple, 7), un caractère spécial (par exemple, * ou %) ou une séquence d'échappement
17
(par exemple, le caractère de tabulation, \t ). Les types int, float, double et char sont
appelés types primitifs. Les noms de type primitif sont des mots-clés et doivent
apparaître en toutes lettres minuscules. L'annexe D résume les caractéristiques des huit
types primitifs (boolean, byte, char, short, int, long, float et double).
Le = à la ligne 12 indique que la variable int number1 doit être initialisée dans sa
déclaration avec le résultat de [Link](). Cela utilise la méthode nextInt de l'entrée
de l'objet Scanner pour obtenir un entier de l'utilisateur au clavier. À ce stade, le
programme attend que l'utilisateur tape le numéro et appuie sur la touche Entrée pour
soumettre le numéro au programme.
Notre programme suppose que l'utilisateur entre une valeur entière valide. Sinon, une
erreur logique se produira et le programme se terminera. Le chapitre 11, Gestion des
exceptions : un regard plus approfondi, explique comment rendre vos programmes plus
robustes en leur permettant de gérer de telles erreurs. Ceci est également connu sous le
nom de rendre votre programme tolérant aux pannes.
2.5.5 Obtention d'un deuxième entier
Ligne 14
[Link]("Enter second integer: "); // prompt
déclare la variable int number2 et l'initialise avec un deuxième entier lu par l'utilisateur
au clavier.
2.5.6 Utilisation de variables dans un calcul
Ligne 17
int sum = number1 + number2; // add numbers then store total in sum
déclare la variable int sum et l'initialise avec le résultat de number1 + number2. Lorsque
le programme rencontre l'opération d'addition, il effectue le calcul en utilisant les valeurs
stockées dans les variables numéro1 et numéro2.
Dans l'instruction précédente, l'opérateur d'addition est un opérateur binaire, car il
comporte deux opérandes : nombre1 et nombre2. Les parties d'instructions qui
contiennent des calculs sont appelées des expressions. En fait, une expression est toute
partie d'une instruction qui a une valeur. La valeur de l'expression nombre1 + nombre2
est la somme des nombres. De même, la valeur de l'expression [Link]() (lignes
12 et 15) est l'entier saisi par l'utilisateur.
18
Bonne pratique de programmation 2.10
Placez des espaces de chaque côté d'un opérateur binaire pour plus de lisibilité.
2.5.7 Affichage du résultat du calcul
Une fois le calcul effectué, la ligne 19
[Link]("Sum is %d%n", sum); // display sum
19
int number1; // declare the int variable number1
number1 = [Link](); // assign the user's input to number1
le numéro tapé par l'utilisateur est placé dans un emplacement mémoire correspondant
au nom numéro1. Supposons que l'utilisateur entre 45. L'ordinateur place cette valeur
entière dans l'emplacement numéro1 (Fig. 2.8), remplaçant la valeur précédente (le cas
échéant) à cet emplacement. La valeur précédente est perdue, ce processus est donc dit
destructif.
number1 45
s'exécute, supposons que l'utilisateur entre 72. L'ordinateur place cette valeur entière
dans l'emplacement numéro2. La mémoire apparaît maintenant comme indiqué dans la
Fig. 2.9.
number1 45
number2 72
Fig. 2.9 | Emplacements de mémoire après le stockage des valeurs pour number1 et number2.
20
Une fois que le programme de la Fig. 2.7 a obtenu les valeurs de nombre1 et nombre2,
il additionne les valeurs et place le total dans la somme variable. La déclaration (ligne
17)
int sum = number1 + number2; // add numbers, then store total in sum
effectue l'addition, puis remplace toute valeur précédente dans la somme. Une fois la
somme calculée, la mémoire apparaît comme illustré à la Fig. 2.10. Les valeurs de
nombre1 et nombre2 apparaissent exactement telles qu'elles étaient avant d'être utilisées
dans le calcul de la somme. Ces valeurs ont été utilisées, mais pas détruites, car
l'ordinateur a effectué le calcul. Lorsqu'une valeur est lue à partir d'un emplacement
mémoire, le processus est non destructif.
number1 45
number2 72
sum 117
2.7 Arithmétique
La plupart des programmes effectuent des calculs arithmétiques. Les opérateurs
arithmétiques sont résumés dans la Fig. 2.11. Notez l'utilisation de divers symboles
spéciaux non utilisés en algèbre. L'astérisque (*) indique la multiplication et le signe
de pourcentage (%) est l'opérateur de modulo, dont nous parlerons bientôt. Les
opérateurs arithmétiques de la Fig. 2.11 sont des opérateurs binaires, car chacun opère
sur deux opérandes. Par exemple, l'expression f + 7 contient l'opérateur binaire + et les
deux opérandes f et 7.
Expression
Opération Opérateur Java Expression Java
algébrique
Addition + f+7 f+7
Soustraction – p–c p-c
Multiplication * f+7 b*m
Division / x / y or -x- or x ÷ y x / y
Modulo % r mod s r%s
Fig.2.11 | Opérateurs arithmétiques.
21
La division entière donne un quotient entier. Par exemple, l'expression 7/4 est évaluée
à 1 et l'expression 17/5 est évaluée à 3. Toute partie fractionnaire dans la division entière
est simplement tronquée (c'est-à-dire ignorée) - aucun arrondi ne se produit. Java
fournit l'opérateur de reste, %, qui donne le reste après division. L'expression x % y
donne le reste après la division de x par y. Ainsi, 7 % 4 donne 3 et 17 % 5 donne 2. Cet
opérateur est le plus souvent utilisé avec des opérandes entiers mais il peut aussi être
utilisé avec d'autres types arithmétiques. Dans les exercices de ce chapitre et dans les
chapitres suivants, nous considérons plusieurs applications intéressantes de l'opérateur
de reste, comme déterminer si un nombre est un multiple d'un autre.
Expressions arithmétiques sous forme de ligne droite
Les expressions arithmétiques en Java doivent être écrites sous forme de ligne droite
pour faciliter la saisie de programmes dans les ordinateurs. Ainsi, des expressions telles
que « a divisé par b » doivent être écrites sous la forme a/b, de sorte que toutes les
constantes, variables et opérateurs apparaissent sur une ligne droite. La notation
algébrique suivante n'est généralement pas acceptable pour les compilateurs :
𝑎
𝑏
Parenthèses pour regrouper des sous-expressions
Les parenthèses sont utilisées pour regrouper les termes dans les expressions Java de la
même manière que dans les expressions algébriques. Par exemple, pour multiplier a par
la quantité b + c, on écrit
un * (b + c)
l'expression dans le jeu de parenthèses le plus interne (a + b dans ce cas) est évaluée en
premier.
Règles de priorité des opérateurs
Java applique les opérateurs arithmétiques dans une séquence précise déterminée par
les règles de priorité des opérateurs, qui sont généralement les mêmes que celles
suivies en algèbre :
1. Les opérations de multiplication, de division et de reste sont appliquées en premier.
Si une expression contient plusieurs de ces opérations, elles sont appliquées de gauche
22
à droite. Les opérateurs de multiplication, de division et de reste ont le même niveau de
priorité.
2. Les opérations d'addition et de soustraction sont ensuite appliquées. Si une
expression contient plusieurs opérations de ce type, les opérateurs sont appliqués de
gauche à droite. Les opérateurs d'addition et de soustraction ont le même niveau de
priorité.
Ces règles permettent à Java d'appliquer les opérateurs dans le bon ordre1. Lorsque nous
disons que les opérateurs sont appliqués de gauche à droite, nous faisons référence à
leur associativité. Certains s'associent de droite à gauche. La figure 2.12 résume ces
règles de priorité des opérateurs. Un tableau de priorité complet est inclus dans l'annexe
A.
Opérateur(s) Opération Ordre d'évaluation (priorité)
* Multiplication
/ Division Evalué en premier. S'il y a plusieurs opérateurs
de ce type, ils sont évalués de gauche à droite.
% Modulo
+ Addition
Évalué ensuite. S'il y a plusieurs opérateurs de ce
– Soustraction type, ils sont évalués de gauche à droite.
= Affectation Évalué en dernier.
Fig.2.12 | Priorité des opérateurs arithmétiques.
Les parenthèses sont obligatoires car la division a une priorité plus élevée que l'addition.
La quantité entière (a + b + c + d + e) doit être divisée par 5. Si les parenthèses sont
omises par erreur, nous obtenons a + b + c + d + e / 5, ce qui donne l'expression
différente
1
Nous utilisons des exemples simples pour expliquer l'ordre d'évaluation. Des problèmes subtils d'ordre
d'évaluation se produisent dans les expressions plus complexes. Pour plus d'informations, reportez-vous au
chapitre 15 de Java™ ™ Language Specification ([Link]
23
𝑒
𝑎 + 𝑏 + 𝑐 + 𝑑 +
5
Voici un exemple de l'équation d'une droite :
Algèbre y = mx + b
Java y = m * x + b;
6 1 2 4 3 5
Les nombres encerclés sous l'instruction indiquent l'ordre dans lequel Java applique les
opérateurs. Les opérations *, % et / sont évaluées en premier dans l'ordre de gauche à
droite (c'est-à-dire qu'elles s'associent de gauche à droite), car elles ont une priorité plus
élevée que + et -. Les opérations + et - sont ensuite évaluées. Ces opérations
s'appliquent également de gauche à droite. L'opération d'affectation (=) est évaluée en
dernier.
Évaluation d'un polynôme du second degré
Pour développer une meilleure compréhension des règles de priorité des opérateurs,
considérons l'évaluation d'une expression d'affectation qui comprend un polynôme du
second degré ax² + bx + c :
Java y = a * x * x + b * x + c;
6 1 2 4 3 5
Les opérations de multiplication sont ’ évaluées en premier dans l'ordre de gauche à
droite (c'est-à-dire qu'elles s'associent de gauche à droite), car elles ont une priorité plus
élevée que l'addition. (Java n'a pas d'opérateur arithmétique pour l'exponentiation, donc
x2 est représenté par x * x. La section 5.4 montre une alternative pour effectuer
l'exponentiation.) Les opérations d'addition sont ensuite évaluées de gauche à droite.
Supposons que a, b, c et x soient initialisés (valeurs données) comme suit : a= 2, b= 3,
c=7 et x= 5. La figure 2.13 illustre l'ordre dans lequel les opérateurs sont appliqués.
24
Vous pouvez utiliser des parenthèses redondantes pour rendre une expression plus
claire. Par exemple, l'instruction précédente peut être entre parenthèses comme suit :
y = (a * x * x) + (b * x) + c ;
La figure 2.15 utilise six instructions if pour comparer deux nombres entiers entrés par
l'utilisateur. Si la condition dans l'une de ces instructions if est vraie, l'instruction
associée à cette instruction if s'exécute ; sinon, l'instruction est ignorée. Nous utilisons
un scanner pour entrer les nombres entiers de l'utilisateur et les stocker dans les
variables number1 et number2. Le programme compare les nombres et affiche les
25
résultats des comparaisons qui sont vraies. Nous montrons trois exemples de sorties
pour différentes valeurs saisies par l'utilisateur.
26