Exercice
1. Lancement
- Demander un environnement sur MyDocker
- Cliquer sur l'icône Eclipse dans le panneau en bas.
- La fenêtre de choix de votre espace de travail apparait :

Choix de l'espace de travail
La majorité des environnements de développement proposent deux niveaux d'organisation des fichiers : les projets (qui contiennent en général plusieurs fichiers) correspondants à une même activité peuvent être regroupés dans un espace, appelé workspace par Eclipse. Vous pouvez par exemple décider d'avoir un espace de travail gloo pour tous les projets que vous allez faire dans cet électif (ce choix est celui fait dans l'exemple montré).
Les workspace mémorisent aussi certains réglages qui seront appliqués à tous les projets qui s'y trouvent.
- Choisir l'espace de travail et cliquer sur Launch .
- L'écran de bienvenue s'affiche, cliquer sur le bouton
pour le fermer (une fenêtre Firefox s'ouvre aussi, avec un message d'erreur, la fermer).

Écran de bienvenue
- Votre environnement de travail ressemble alors à ceci :

Workspace initial
- Fermer la vue
Task List
qui n'est pas utile.
2. Création du projet
- Créer un nouveau projet Java (
Create a Java project
dans l'onglet Package Explorer ouFile → New → Java Project
) nommégloo.factorielle
.

Création d'un nouveau projet Java
- Cliquer sur Finish , votre nouveau projet apparait dans votre espace de travail, vous pouvez utiliser les ► pour afficher son contenu :

Workspace après la création du nouveau projet
Le dossier src
contient le code source du projet. Un fichier, module-info.java
est déjà présent, nous pouvons l'ignorer pour l'instant.
3. Création du programme
- Créer une nouvelle classe
Factorielle
(menuFile → New → Class
ou menu droit sur le projet→ New → Class
) en demandant la création de la méthodemain
; vérifier que le paquetage estgloo.factorielle
:

Création d'une nouvelle classe
- Modifier la fonction
main
avec code suivant :
public static void main(String[] args) { System.out.println("La factorielle de 5 est 120"); }
L'indentation est importante pour la compréhension du code. Le raccourci ctrl/cmd i
permet d'indenter correctement la partie de code sélectionnée (ctrl/cmd a
permet de sélectionner tout le code).
- Sauvegarder votre fichier modifié en cliquant sur l'icône disquette :

Sauvegarde d'un fichier modifié
4. Exécution du programme
- Exécuter votre programme en cliquant sur la flèche verte :

Lancement du programme
Le message s'affiche dans un onglet Console (qui s'ouvre s'il ne l'était pas avant).
5. Définition de la fonction factorielle
- Ajouter à l'intérieur de la classe Factorielle la fonction de calcul de la factorielle qui reçoit un argument de type
long
et retourne unlong
:
public static long factorielle(long n) { if (n == 0) return 1; return n * factorielle(n - 1); }
6. Utilisation de la fonction factorielle
- Pour récupérer le nombre donné par un utilisateur, nous allons utiliser la classe
java.util.Scanner
. Modifier la fonction principale ainsi :
public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Donner un nombre : "); long valeur = input.nextLong(); long fact = factorielle(valeur); System.out.println("La factorielle de " + valeur + " est " + fact); input.close(); }
Eclipse souligne Scanner
en rouge car cette classe n'est pas connue par défaut. Si vous déplacez le curseur sur ce mot souligné, Eclipse vous propose des quick fixes. Celui qui nous intéresse est Import 'Scanner' (java.util)
, choisissez le.

Quick fixes proposés par Eclipse
La ligne
import java.util.Scanner;
est ajoutée par Eclipse, et Scanner
n'est plus souligné en rouge.
Quand vous exécutez le programme, c'est dans l'onglet Console que vous entrerez le nombre demandé.

Lecture d'un nombre sur la console
👏 Bravo, vous avez réussi à écrire votre premier programme interactif Java👏
8. Écriture d'un programme en autonomie
- Créer un nouveau projet Java nommé
gloo.fibonnaci
. - Créer une nouvelle classe
Fibonacci
en demandant la création de la méthodemain
. - Ajouter à l'intérieur de la classe Fibonacci une fonction qui reçoit un argument de type
long
et retourne unlong
qui est le successeur de l'argument selon les règles de la suite de Fibonacci. - Modifier la fonction
main
pour qu'elle demande un nombre à l'utilisateur et affiche la suite de Fibonacci de ce nombre.
8. Débogage de votre programme
- Relancer votre programme en donnant
20
comme valeur :

Calcul de la factorielle de 20
puis 21
:

Calcul de la factorielle de 21
Manifestement, ce résultat est incorrect.
- Double-cliquer dans l'espace à gauche des numéros de ligne, face à l'appel de la fonction factorielle, un petit rond bleu apparait, c'est un point d'arrêt pour le débogueur :

Ajout d'un point d'arrêt
- Lancer votre programme sous le contrôle du débogueur

Lancement avec le débogueur
- Donner de nouveau 21 comme valeur, un dialogue vous demande de confirmer le changement de perspective :

Dialogue de changement de perpective
Une perpective est un arrangement particulier de vues et d'outils afin de faciliter certaines actions.
La perpective de débogage affiche à gauche la pile d'appels, au centre le core source avec une mise en évidence de la prochaine instruction qui va être exécutée, et à droite les variables visibles avec leurs valeurs. La palette d'outils est aussi modifiée.

Perpective de débogage
Le débogueur a suspendu l'exécution du programme au niveau du point d'arrêt, donc avant l'appel à la fonction factorielle. On peut vérifier que la variable valeur vaut 21.
- Effectuer un pas à pas entrant :

Bouton du pas à pas entrant
Comme l'instruction courante est un appel à la fonction factorielle, cette commande a pour effet d'effectuer cet appel avec une suspension sur la première instruction de cette fonction :

Après le pas à pas entrant
On peut vérifier que l'argument n vaut 21.
- Effectuer un pas à pas principal pour exécuter le test :

Bouton du pas à pas principal
Cette commande a pour effet d'effectuer complètement l'instruction courante, y compris si c'est un appel de fonction. Ce n'est pas le cas ici, et comme le test est négatif, l'exécution est suspendu sur l'appel récursif.
- Effectuer de nouveau un pas à pas entrant :

Après le pas à pas entrant
L'exécution est suspendue de nouveau sur la première instruction de la fonction factorielle, mais cette fois ci, la valeur de l'argument n est 20, et on peut visualiser la récursion dans la vue de la pile d'appels.
- Effectuer un pas à pas sortant :

Bouton du pas à pas sortant
Cette commande a pour effet d'effectuer toutes les instructions jusqu'à ce que l'appel courant soit terminé. La suspension se fait donc au niveau de l'appel qui a appelé l'appel courant, ici au niveau de l'appel à factorielle(21) qui a appelé factorielle(20). On peut visualiser le résultat de cet appel dans la vue des variables et vérifier que ce résultat est correct :

Après le pas à pas sortant
- Effectuer de nouveau un pas à pas sortant. L'exécution est donc suspendue dans main au niveau de l'appel à factorielle(21). On s'aperçoit que c'est ici que le résultat devient négatif, et donc incorrect.
- Terminer l'exécution avec le bouton de terminaison :

Bouton de terminaison
- et revenir à la perpective Java :

Bouton pour revenir à la perpective Java
- Corriger votre programme pour ignorer les valeurs d'entrée négatives ou supérieures strictement à 20.
D'où provient l'erreur ?
- Une variable de type
long
en Java stocke des entiers sur 64 bits en complément à 2. La plus grande valeur représentable est 263 - 1 qui est plus grande que la factorielle de 20 mais plus petite que celle de 21. Il y a donc débordement et le nombre tronqué est alors un nombre négatif.
Comment obtenir une archive d'un projet Eclipse ?
- Il existe une commande Export... dans le menu File et dans le menu contextuel sur un projet, choisir ensuite Archive File dans General.

© 2024-25 CentraleSupélec