Cette série a pour but de vous faire faire vos premiers pas en Java. Elle doit vous permettre de vous familiariser avec l'écriture, la compilation et la correction de programmes. Les différents tutoriaux IntelliJ (ou Eclipse si vous choisissez cet outil) doivent impérativement avoir été consultés si vous ne connaissez pas cet environnement. N'hésitez pas à faire appel aux assistants pour vous aider en cas de problème!
Vous allez maintenant créer votre première petite application Java : encore le petit programme qui va afficher à l'écran Hello, World!.
Il faut au préalable avoir créé un projet Serie02 dans IntelliJ. Si vous ne vous rappelez plus comment faire référez vous au premier tutoriel IntelliJ.
Lorsque le projet Serie02 est créé, faites un clic gauche sur le dossier src (fichier source) à gauche de l'écran. Dans le menu qui apparaît, sélectionnez New->Java Class:
L'assistant New Java Class va alors s'ouvrir. Entrez HelloWorld en guise de nom (Name) et appuyez sur Enter:
L'éditeur intégré à IntelliJ va alors s'ouvrir au centre de l'espace de travail et vous exposer le code source de votre nouvelle classe; ce qui devrait ressembler à ceci :
Copiez maintenant le texte suivant entre les accolades ouvrante et fermante de votre classe ("{" et "}"):
public static void main(String [] args) { System.out.println("Hello, World!"); } |
Pour faire ceci, sélectionner le texte à copier avec le bouton gauche de votre souris, puis copiez-le en vous plaçant au bon endroit dans l'éditeur IntelliJ et en cliquant sur le bouton du milieu de votre souris.
Note: il est normal que vous ne compreniez pas encore tous les éléments de ce code (en particulier pourquoi il y a un public devant le nom de la classe). Ces éléments vous seront expliqués graduellement en cours de semestre. Utilisez le raccourci Ctrl + S ou cliquez sur File->Save All dans le menu principal. Une fois votre portion de code insérée, vous pouvez l'exécuter en cliquant sur la petite flèche verte dans le bandeau latéral gauche. Vous pouvez aussi le faire en cliquant avec le bouton droit de la souris sur HelloWorld.java dans la vue Navigator et sélectionnez Run 'HelloWorld.main() dans le menu qui apparaît : Vous pouvez aussi exécute en cliquant sur le flèche à côté de Current File en haut à droite:
Quelle que soit la façon de procéder, une vue Console va s'ouvrir qui va afficher le texte Hello, World!
Cette procédure est nécessaire afin d'éviter tout problème avec les caractères accentués. Ouvrez les préférences d'IntelliJ, cliquez sur Editor puis sur File encoding pour avoir accès à la configuration de l'espace de travail. Changez le réglage pour Global Encoding en cliquant sur UTF-8 dans le menu déroulant. Cette partie n'est pas indispensable dans un premier temps, mais elle s'avérera utile lorsque vous coderez les mini-projets ou lorsque vous souhaiterez appeler vos programmes avec des arguments et des options particulières.
Dans de nombreux exercices qui vous seront proposés, des fichiers utilitaires vous seront fournis. Il s'agit dans la plupart des cas de programmes partiels qu'il faudra compléter (ceci vous évite de tout devoir saisir vous même). Dans ce tutorial vous apprendrez à insérer un fichier utilitaire dans un projet IntelliJ existant. Le fichier Repeater.java, fourni ici, nous servira d'exemple de fichier à insérer. Premièrement, télécharger le fichier Repeater.java et stockez-le dans votre répertoire de travail (par exemple [chemin vers le workspace IntelliJ]/Serie02/src). Votre fichier devrait apparaitre à gauche dans le menu de votre espace de travail IntelliJ: Double-cliquez sur le nouveau fichier qui apparaît dans votre projet: Repeater.java. Votre environnement de travail devrait alors ressembler à quelque chose comme ceci:
Au cas où le fichier n'apparaîtrait pas spontanément, vous pouvez faire un clic droit sur le dossier src dans le navigateur puis Reload from disk.
Note: Si vous faites la manipulation de copier le fichier Repeater.java en le glissant-déposant dans IntelliJ, il se peut qu'une fenêtre comme celle-ci apparaîsse:
Vous apprendrez ici comment IntelliJ met en évidence vos erreurs de syntaxe et vous donne des indications sur comment les corriger. Copiez d'abord le fichier Error.java dans votre répertoire de travail (par exemple [chemin vers le workspace IntelliJ]/Serie02/src et insérez-le dans votre projet Serie02 comme vous l'avez appris dans le tutorial précédent. Double-cliquez ensuite sur le fichier Error.java dans la vue Navigator. Le contenu du ficher apparaît alors dans l'éditeur. Vous remarquerez alors que des éléments sont soulignés en rouge et d'autres sont coloriés en rouge. Les éléments soulignés ou coloriés; vous indiquent qu'il y a des erreurs à ces endroits de votre code. Placez maintenant votre curseur sur la ligne de code numéro 4. Une ampoule devrait apparaître à gauche, cette ampoule est une aide pour comprendre l'erreur en question. Vous pouvez ensuite cliquez sur Insert. Le texte printnl est aussi être surligné en rouge. Cliquez à nouveau sur la petite ampoule et sélectionnez rename reference puis sur le println. Il y a aussi une erreur sur la ligne 5, faites comme pour la ligne 4 et cliquez ensuite sur change variable "b" to "String". Dans les lignes précédentes, nous avons mal orthographié public et static. Parfois, l'ampoule ne peut pas modifier intuitivement l'erreur est c'est à vous de décider de ce qu'il faut faire. Lorsque vous développez des projets, IntelliJ « apprend» néanmoins leur contenu et structure, connait toutes les classes impliquées, y compris les classes prédéfinies, et il peut alors vous faire des suggestions pertinentes sur comment corriger. Ces suggestions sont indiquées par les fameuses petites ampoules de tout à l'heure. Il s'agit grosso-modo des messages d'erreurs générés par le compilateur de Java. Ces indications sont très utiles : combinées avec vos connaissances de Java, elles vous permettront de corriger vos erreurs. Ici, après avoir changé pulbic en public et statci en static toutes les bulles rouges associées aux lignes erronées sont grisées. Il vous suffit de sauvegarder votre fichier pour voir les croix disparaitre. Votre syntaxe est maintenant correcte:
Les différentes variantes suivantes
Ouvrez dans le projet courant de IntelliJ le programme
FauxCalcul.java.
Ici IntelliJ émet une mise en garde de division par zéro mais ne signale pas de probèmes de compilation. Exécuter maintenant votre programme. Le
message d'erreur suivant devrait apparaitre dans la console:
Réglage de l'encodage des caractères
Création d'une configuration
Exercice 2: Tutorial IntelliJ 3: Insertion de fichiers utilitaires (IntelliJ, Niveau 0)
Exercice 3: Tutorial IntelliJ 4: Correction d'erreurs (IntelliJ, Niveau 0)
1. Trouver des erreurs de syntaxe avec IntelliJ (Niveau 0)
2. Exercices simples
3. Encore des erreurs (Niveau 2)
On continue a s'exercer, mais cette fois avec un programme un peu plus
long où il y a plusieurs erreurs. Ouvrez dans IntelliJ et corrigez à votre guise le programme mais sans supprimer les instructions fautives (il faut les corriger ;-)):
Declarations.java
jusqu'à ce qu'il soit exempt d'erreurs.
4. Cette fois c'est à l'exécution... (Niveau 2)
java.lang.ArithmeticException: / by zero
at FauxCalcul.main(FauxCalcul.java:11)
On voit que la machine virtuelle Java indique le nom du fichier et le numéro de ligne
où le problème s'est produit: ligne 11 du fichier FauxCalcul.java. Vous pouvez vous positionner sur cette ligne de code en cliquant sur "(FauxCalcul.java:11)" qui apparait dans la vue "Console" de IntelliJ.
Essayez
de faire afficher à votre programme les différentes valeurs des
variables juste avant que l'erreur se soit produite afin d'expliquer
l'erreur.
Nous verrons plus tard qu'il existe des moyens plus sophistiqués dans IntelliJ pour traquer efficacement ce genre d'erreur.
Pour préparer le cours du mercredi 18.09.2024, vous pouvez, après avoir visionné les vidéos en ligne de la semaine 1 («Bases de programmation»), répondre au quiz de la même semaine.
Vous allez maintenant créer votre première petite application Java : encore le petit programme qui va afficher à l'écran "Hello, World!".
Il faut au préalable avoir créé un projet Serie02 dans Eclipse. Si vous ne vous rappelez plus comment faire référez vous au deuxième tutorial Eclipse.
Lorsque le projet Serie02 existe placez votre souris sur la vue "Navigator" de Eclipse et cliquez avec le bouton droit de la souris sur le dossier Serie02. Dans le menu qui apparaît, sélectionnez "New->Class":
L'assistant "New Java Class" va alors s'ouvrir. Entrez "HelloWorld" en guise de nom ("Name") et cliquez sur "Finish":
L'éditeur intégré à Eclipse va alors s'ouvrir au centre du workbench et vous exposer le code source de votre nouvelle classe; ce qui devrait ressembler à ceci :
Copiez maintenant le texte suivant entre les accolades ouvrante et fermante de votre classe ("{" et "}"):
public static void main(String [] args) { System.out.println("Hello, World!"); } |
Pour faire ceci, sélectionner le texte à copier avec le bouton gauche de votre souris, puis copiez-le en vous plaçant au bon endroit dans l'éditeur Eclipse et en cliquant sur le bouton du milieu de votre souris.
Note: il est normal que vous ne compreniez pas encore tous les éléments de ce code (en particulier pourquoi il y a un public devant le nom de la classe). Ces éléments vous seront expliqués graduellement en cours de semestre. Cliquez sur le bouton "Save" ou cliquez sur "File->Save All" dans le menu principal.
Une fois votre portion de code insérée, cliquez avec le bouton droit de la souris sur "HelloWorld.java" dans la vue "Navigator" et sélectionnez "Run As->1 Java Application" dans le menu qui apparaît :
Maintenant, une vue "Console" va s'ouvrir qui va afficher le texte "Hello, World!"
Notez que si ça n'est pas le cas par défaut sur votre Eclipse, vous pouvez faire
numéroter les lignes de votre code (fortement recommandé) en cliquant avec le bouton droit et en
sélectionnant l'option "Preferences > General > Editors > Text editors" :
Cette procédure est nécessaire afin d'éviter tout problème avec les caractères accentués. Ouvrez les préférences d'Eclipse, déroulez la section nommée General puis cliquez sur Workspace pour avoir accès à la configuration de l'espace de travail. Changez le réglage pour Text file encoding en cliquant sur Other et en sélectionnant UTF-8 dans le menu déroulant.
Cette partie est également nécessaire pour éviter tout problème de compatibilité avec le correcteur automatique utilisé dans le cadre de ce cours. Toujours dans les réglages liés à l'espace de travail, changez le réglage pour New text file line delimiter en cliquant sur Other et en sélectionnant Unix dans le menu déroulant.
Dans de nombreux exercices qui vous seront proposés, des fichiers utilitaires vous seront fournis. Il s'agit dans la plupart des cas de programmes partiels qu'il faudra compléter (ceci vous évite de tout devoir saisir vous même). Dans ce tutorial vous apprendrez à insérer un fichier utilitaire dans un projet Eclipse existant. Le fichier Repeater.java, fourni ici, nous servira d'exemple de fichier à insérer. Premièrement, télécharger le fichier Repeater.java et stockez-le dans votre répertoire de travail (par exemple [chemin vers le workspace]/Serie02/src). Tout ce qu'il suffit de faire maintenant est d'informer Eclipse que le contenu du répertoire associé au projet Serie02 a changé.Pour ce faire, cliquez au moyen du bouton droit de la souris sur le projet Serie02 dans la vue "Navigator" de Eclipse et sélectionnez "Refresh" dans le menu qui apparaît. Une autre option consiste à sélectionner le projet en question et presser sur la touche F5
Double-cliquez sur le nouveau fichier qui apparaît dans votre projet: Repeater.java. Votre environnement de travail devrait alors ressembler à quelque chose comme ceci:
Vous apprendrez ici comment Eclipse met en évidence vos erreurs de syntaxe et vous donne des indications sur comment les corriger. Copiez d'abord le fichier Error.java dans votre répertoire de travail (par exemple [chemin vers le workspace]/Serie02/src et insérez-le dans votre projet Serie02 comme vous l'avez appris dans le tutorial précédent. Double-cliquez ensuite sur le fichier Error.java dans la vue "Navigator". Le contenu du ficher apparaît alors dans l'éditeur. Vous remarquerez alors que de nombreux éléments sont soulignés en rouge. Une petite croix dans une bulle rouge devant la ligne où il y a des éléments soulignés vous indique qu'il y a des erreurs dans cette ligne de code.
Cliquez maintenant sur la petite ampoule sur la gauche de la ligne 4 (le numéro de ligne apparait en bas de la fenêtre Eclipse, vous pouvez aussi faire numéroter les lignes en cliquant avec le bouton droit et en sélectionnant l'option "Preferences" puis "Text Editors"). Une fois que vous avez cliqué sur l'ampoule, un menu apparaîtra vous suggérant comment corriger le problème. Sélectionnez ici "Change to 'System' (java.lang)".
Le texte printnl va maintenant être souligné. Cliquez à nouveau sur la petite ampoule et sélectionnez "change to 'println(...)'". Dans le cas précédent, nous avons mal orthographié le nom de la classe System (prédéfinie par les librairies Java). Comme Eclipse connait toutes les classes de votre projet, y compris les classes prédéfinies, il peut vous faire des suggestions intelligentes sur comment corriger. Ces suggestions sont indiquées par les fameuses petites ampoules de tout à l'heure. Avec les autres erreurs, pulbic et statci, nous sommes en fait un peu moins chanceux : nulle ampoule à l'horizon. Nous ne sommes cependant pas complétement démunis car si l'on place la souris sur la croix précédent la ligne erronées, des informations utiles apparaîssent :
Il s'agit grosso-modo des messages d'erreurs générés par le compilateur de Java. Ces indications sont très utiles : combinées avec vos connaissances de Java, elles vous permettront de corriger vos erreurs. Ici, après avoir changé pulbic en public et statci en static toutes les bulles rouges associées aux lignes erronées sont grisées. Il vous suffit de sauvegarder votre fichier pour voir les croix disparaitre. Votre syntaxe est maintenant correcte:
Les différentes variantes suivantes
Réglage de l'encodage des caractères
Réglage de la terminaison des lignes
Exercice 6: Tutorial Eclipse 4 (inutile si vous travaillez avec IntelliJ): Insertion de fichiers utilitaires (Eclipse, Niveau 0)
Exercice 7: Tutorial Eclipse 5 (inutile si vous travaillez avec IntelliJ): Correction d'erreurs (Eclipse, Niveau 0)
1. Trouver des erreurs de syntaxe avec Eclipse (Niveau 0)
2. Exercices simples
Ouvrez dans le projet courant de Eclipse le programme FauxCalcul.java. Ici Eclipse est muet et aucune ligne n'apparait comme étant erronée. Exécuter maintenant votre programme. Le message d'erreur suivant devrait apparaitre.
java.lang.ArithmeticException: / by zero at FauxCalcul.main(FauxCalcul.java:11)On voit que la machine virtuelle Java indique le nom du fichier et le numéro de ligne où le problème s'est produit: ligne 11 du fichier FauxCalcul.java. Vous pouvez vous positionner sur cette ligne de code en cliquant sur "(FauxCalcul.java:11)" qui apparait dans la vue "Console" de Eclipse. Essayez de faire afficher à votre programme les différentes valeurs des variables juste avant que l'erreur se soit produite afin d'expliquer l'erreur.
Nous voulons écrire un programme permettant de calculer l'IMC (indice de masse corporelle) d'une personne. L'IMC se calcule à partir du poids et de la taille suivant la formule : poids (en kg) divisé par le carré de sa taille (en m).
Commencez par ouvrir le fichier (vide) IMC.java dans votre éditeur favori ou dans Eclipse.
Préparez la «coquille vide» de base accueillant votre programme :
class IMC { public static void main(String[] args) { } } |
Nous verrons plus tard dans le cours à quoi correspondent exactement toutes ces lignes, mais pour l'instant considérez cela comme la base minimale pour que votre programme fonctionne.
On peut maintenant commencer à attaquer notre problème.
A priori ces grandeurs sont des nombres réels ; nous déclarons donc des variables de type double :
class IMC { public static void main(String[] args) { double poids; double taille; } } |
class IMC { public static void main(String[] args) { double poids = 74.5 ; double taille = 1.75 ; } } |
On peut maintenant imaginer passer directement au calcul et à l'affichage de l'IMC. On pourrait par exemple directement afficher l'IMC, mais le but étant quand même de travailler un peu avec des variables, introduisons ici une variable pour l'IMC (même si pour un programme aussi simple ce n'est pas strictement nécessaire) :
class IMC { public static void main(String[] args) { double poids = 74.5 ; double taille = 1.75 ; double imc = poids / (taille * taille); } } |
puis affichons le, par exemple comme ceci :
class IMC { public static void main(String[] args) { double poids = 74.5 ; double taille = 1.75 ; double imc = poids / (taille * taille); System.out.println("Pour " + poids + " kg et " + taille + " m, l'IMC est de " + imc); } } |
Compilez puis exécutez votre programme. Votre programme devrait alors afficher :
Pour 74.5 kg et 1.75 m, l'IMC est de 24.326531
Un tel programme est évidemment d'un usage limité et il serait beaucoup plus utile de permettre le calcul de l'IMC pour n'importe quels taille et poids. On devrait donc pour cela demander le poids et la taille à l'utilisateur. Ceci se fait en introduisant un «Scanner» comme présenté en cours :
import java.util.Scanner; class IMC { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double poids = 74.5 ; double taille = 1.75 ; double imc = poids / (taille * taille); System.out.println("Pour " + poids + " kg et " + taille + " m, l'IMC est de " + imc); } } |
puis en posant les questions :
import java.util.Scanner; class IMC { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double poids = 74.5 ; double taille = 1.75 ; System.out.print("Entrez un poids (en kg) : "); poids = scanner.nextDouble(); System.out.print("Entrez une taille (en m) : "); taille = scanner.nextDouble(); double imc = poids / (taille * taille); System.out.println("Pour " + poids + " kg et " + taille + " m, l'IMC est de " + imc); } } |
Notre programme peut maintenant calculer l'IMC pour n'importe quels poids et taille. Il peut être amélioré en contrôlant que les valeurs saisies soient bien raisonnables. Mais pour cela, il faut utiliser ce que l'on appelle des structures de contrôle (vues dès la semaine prochaine).
Concernant la lecture de données introduites au clavier, il convient de faire les remarques suivantes:
Donnez votre age : 22 Votre annee de naissance est : 2002
Le but de cet exercice est d'écrire un programme qui permet d'adapter automatiquement, en fonction du nombre de convives, les quantités d'ingrédients nécessaires à la confection d'une fondue fribourgeoise.
Ecrivez un programme Fondue.java qui :
déclare une constante BASE, initialisée à 4, et qui indique le nombre de personnes pour laquelle est conçue la recette de base ;
déclare une variable fromage, initialisée à 800.0, qui donne la quantité de fromage en grammes nécessaire pour BASE personnes (du «Vacherin fribourgeois» en l'occurrence !) ;
déclare une variable eau, initialisée à 2.0, qui donne la quantité d'eau en décilitres nécessaire pour BASE personnes ;
déclare une variable ail, initialisée à 2.0, qui donne le nombre de gousses d'ail nécessaires pour BASE personnes (on choisit le type double car on veut pouvoir utiliser des moitiés de gousses par exemple) ;
déclare une variable pain, initialisée à 400.0, qui donne la quantité de pain en grammes nécessaire pour BASE personnes ;
demande à l'utilisateur d'introduire le nombre de convives pour lequel on veut préparer la recette ;
lit la réponse de l'utilisateur et l'enregistre dans une variable nbConvives de type entier ;
adapte les quantités de chaque ingrédient en faisant une règle de trois (nouvelleQuantite = quantiteDeBase * nbConvives / BASE ) ;
et affiche la recette pour le nombre de convives voulus selon l'exemple ci-dessous.
Entrez le nombre de personne(s) conviée(s) à la fondue : 3 Pour faire une fondue fribourgeoise pour 3 personnes, il vous faut : - 600.0 gr de Vacherin fribourgeois - 1.5 dl d'eau - 1.5 gousse(s) d'ail - 300.0 gr de pain - du poivre à volonté
Écrivez un petit programme Java, Degre3.java, vous
permettant d'évaluer un polynôme du 3ème degré de la forme:
((a+b)/2)x3
+ (a+b)2x2
+ a + b + c
Exemple d'exécution:
Entrez a (int) : 1 Entrez b (int) : 2 Entrez c (int) : 3 Entrez x (double) : 3.5 La valeur du polynôme est : 180.5625Notez qu'il n'y a pas d'opérateur simple pour la puissance 3 en Java. Il faut utiliser des multiplications. Vous introduirez également au besoin des variables auxiliaires pour rendre le calcul plus efficace. N'oubliez pas de faire en sorte que le nom de la classe soit identique au nom du fichier.
Compilez et exécutez les deux programmes Moyenne1.java et Moyenne2.java. Expliquez pourquoi la valeur retournée est différente d'un programme à l'autre.
1 2 3 4 5 6 7 8 |
class Moyenne1 { public static void main(String[] args) { double noteProgrammation = 6.0; double noteAlgebre = 5.0; System.out.println("Ma moyenne est " + (noteProgrammation++ + noteAlgebre) / 2.0 ); } } |
1 2 3 4 5 6 7 8 |
class Moyenne2 { public static void main(String[] args) { double noteProgrammation = 6.0; double noteAlgebre = 5.0; System.out.println("Ma moyenne est " + (++noteProgrammation + noteAlgebre) / 2.0 ); } } |
Indiquez, pour chaque affectation dans le programme Transtypage ci-dessous, si l'affectation est possible et, le cas échéant, la valeur exacte qui sera affectée à la variable.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class Transtypage { public static void main(String[] args) { int n1 = 2; double r1 = 2.7; int n2 = 2.7; double r2 = 5; int n3 = (int) 5.6; double r3 = 5.6; int n4 = 9; double r4 = (double) n4; double r5 = (int) r4; int n5 = 19 / 4; int n6 = n5 / r5; double r6 = 5.0; int n7 = (int) (n5 / r5); double r7 = 19.0 / r6; double r8 = 15.0 / n3; double r9 = 19 / 4; double r10 = (double) (19 / 4); double r11 = (double) 19 / (double) 4; } } |
Implémentez en Java un algorithme vous permettant de permuter les
valeurs de deux variables.
Exemple d'exécution:
Entrez x: 1 Entrez y: 2 Avant permutation: x : 1 y : 2 Après permutation: x : 2 y : 1
Une tante fortunée vous envoie un jour une petite enveloppe (en francs tout ronds) pour vos études à l'EPFL. L'étudiant.e prévoyant.e et organisé.e que vous êtes décide de gérer cette somme de la façon suivante :
Combien avez-vous reçu d'argent (Frs)? 800 Livre et Fournitures: 600 Frs Vous pouvez ensuite acheter: 33 cafes a Sat 16 numeros du Flash 22 billets de métro et il vous restera 4 Frs pour les roses blanches.Indication: utilisez des variables de type int. Le résultat d'une division de deux int sera tronqué à un int. Utilisez l'opérateur % qui vous donne le reste de la division entière.
Dernière mise à jour: 20/09/2024 (Revision: 1.2)