Préfixé par 📘, des "checkpoints" pour vous aider à vérifier que vous avez tout bon.
La correction sera automatique, prenez donc soin de respecter les indications les plus précises, sinon pas de point.
-
Installer Git (cf https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
-
(Sur Windows, avoir un terminal POSIX type Git Bash, la suite de l’exercice est à faire dans celui-ci)
-
Configurer Git avec votre nom et email
-
git config --global user.name "John Doe"
-
git config --global user.email [email protected]
-
-
Générer une clé SSH (si absente) et donner la partie publique à GitHub (cf https://help.github.com/articles/connecting-to-github-with-ssh/)
-
Installer Java 17 (cf https://adoptium.net/)
-
📘 Les commandes
javac -version
etjava -version
doivent afficher la version 17 -
Installer IntelliJ Community (cf https://www.jetbrains.com/fr-fr/idea/download)
-
Créer un nouveau dépôt Git public sur la plateforme GitHub avec le nom java_exercise_1 initialisé avec un fichier README.md (case à cocher dans le formulaire de création de dépôt)
-
Cloner ce nouveau dépôt en utilisant l’url SSH
-
La branche par défaut est la branche main c’est sur celle-ci que nous allons travailler
-
Créer deux répertoires src et bin qui contiendront respectivement les sources (fichiers *.java) et les fichiers compilés (fichiers *.class)
-
Ajouter une classe
HelloWorld
qui contiendra une fonctionmain
et qui affichera le messageHello World
dans la sortie standard -
Créer un fichier compile.sh qui compilera tous les fichiers sources du dossier src dans le dossier bin
Note
|
Le compilateur Java est disponible à travers la commande L’option qui nous intéresse aujourd’hui est La commande complète est donc |
-
Exécuter le script
-
Lancer ce premier programme
Note
|
La machine virtuelle Java est disponible à travers la commande L’option qui nous intéresse aujourd’hui est La commande complète est donc |
-
Créer un fichier .gitignore contenant les lignes
bin/
etout/
afin de ne pas commiter les fichiers générés -
Indexer et commiter les fichiers nouvellement créés, sans oublier d’ajouter le bit d’exécution du fichier compile.sh à l’index git
-
📘 Le commit doit contenir 3 fichiers :
-
.gitignore
-
compile.sh
-
src/HelloWorld.java
-
A partir de là, il est conseillé d’ouvrir le projet (dossier contenant src et bin) avec IntelliJ afin de faciliter l’édition de code Java.
Nous allons écrire un programme dont le comportement sera dépendant de ce que l’utilisateur écrira dans la console.
Note
|
Pour ouvrir un projet existant avec IntelliJ, utiliser le menu File → New → Project from Existing Sources et sélectionner le répertoire racine. Ensuite pour indiquer que le répertoire src contient des fichiers Java à compiler, cliquer droit sur le dossier src et Mark Directory as → Sources Root. Pour spécifier le JDK à utiliser, cliquer droit sur le dossier racine et Open Module Settings → Project Settings → Project → SDK et sélectionner JDK17 (après avoir importé le JDK précédemment installé si c’est la première fois). |
-
Créer une seconde classe
Launcher
contenant elle aussi une fonctionmain
-
Afficher un texte de bienvenue
-
Assigner à une variable une instance de la classe
java.util.Scanner
dont le constructeur prendra comme paramètreSystem.in
Note
|
De même, La classe |
-
Récupérer la prochaine entrée utilisateur dans une variable
-
Si cette entrée est égale à
"quit"
, laisser la méthode se terminer, et le programme se finir -
Sinon afficher
"Unknown command"
avant la fin du programme -
📘 le programme doit compiler (grâce au script précédemment créé) et être lançable sans erreur grâce à la commande
java -cp bin Launcher
-
Publier et pousser ces modifications sur GitHub
-
Introduire une boucle afin de ne pas obliger l’utilisateur à relancer le programme en cas de commande inconnue
-
📘 Le comportement du programme doit maintenant être d’afficher
"Unknown command"
en boucle, sauf si l’utilisateur écrit quit -
Publier et pousser ces modifications sur GitHub
-
Ajouter la possibilité de taper la commande fibo qui demandera alors un nombre n à l’utilisateur avec une question explicite et renverra la valeur de la suite de Fibonacci à l’index n
Note
|
La suite de Fibonacci peut être exprimée comme ceci :
Ainsi F(10) = 55 |
Note
|
Les méthodes |
-
Publier et pousser ces modifications sur GitHub
L’objectif est de créer un programme permettant à l’utilisateur de connaitre, au sein d’un texte qu’il propose au programme, les 3 mots les plus utilisés dans ce texte.
* Ajouter la possibilité de taper la commande freq qui demandera alors un chemin de fichier à l’utilisateur avec une question explicite
* Essayer de lire le contenu du fichier grâce à la méthode statique utilitaire java.nio.file.Files.readString
prenant en paramètre un objet de type Path
.
Un tel objet peut être construit grâce à la méthode statique Paths.get
prenant en paramètre un chemin de fichier
en cas d’échec, afficher le message "Unreadable file: "
suivi du nom de la classe de l’exception et de son message
en cas de succès, afficher les 3 mots les plus fréquents sur une même ligne, un mot étant séparé d’un autre par un espace
Note
|
Vous pouvez notamment utiliser :
|
-
Publier et pousser ces modifications sur GitHub
Le refactoring est une phase du développement qui ne change pas le comportement d’un programme mais facilite sa compréhension et les évolutions futures.
Ici nous allons sortir la logique des différentes commandes dans des classes dédiées, afin de ne pas avoir à allonger la méthode main
-
Créer une interface
Command
avec deux méthodes abstraites-
name
renvoyant unString
-
run
renvoyant unboolean
et prenant en paramètre un objet de type Scanner
-
-
Créer trois classes
Quit
,Fibo
etFreq
implémentantCommand
et reprenant chacune le fonctionnement d’une des trois commandes existantes.-
la valeur retournée par la méthode
name
est ce que l’utilisateur doit écrire pour accéder à la commande -
le
boolean
renvoyé par la méthoderun
est ce qui décidera la boucle à s’interrompre
-
-
Changer le code de la fonction main en
-
créant une variable de type
List<Command>
et contenant une instance de chaque implémentation deCommand
-
changeant le code à l’intérieur de la boucle pour
-
prendre une entrée utilisateur
-
chercher une commande correspondante dans la liste
-
afficher Unknown command en cas d’échec et recommencer la boucle
-
exécuter la méthode
run
de la commande trouvée en lui passant la variable de typeScanner
en paramètre -
si le boolean de retour de cette méthode est
true
, laisser le programme se terminer -
sinon recommencer la boucle
-
-
-
Publier et pousser ces modifications sur GitHub
L’objectif de cette partie finale est d’implémenter un algorithme de prédiction en fonction de la fréquence
d’utilisation de mots d’un texte, classiquement utilisé sur les téléphones portables.
-
Créer une nouvelle commande
Predict
se déclenchant quand l’utilisateur écrit predict. -
Cette commande demandera un chemin de fichier à l’utilisateur avec une question explicite pour apprendre le lexique du texte
-
en cas d’échec de la lecture, afficher le message
"Unreadable file: "
suivi du nom de la classe de l’exception et de son message -
dans le cas où le texte est lu avec succès par le programme, la commande calculera pour chaque mot, le mot le plus fréquent arrivant juste après
-
finalement le programme demandera à l’utilisateur d’écrire un mot
-
si le mot n’existe pas dans le texte analysé, afficher un message d’erreur
-
si le mot existe, reconstituer et afficher la phrase statistiquement la plus plausible avec une limite de 20 mots
-
-
Publier et pousser ces modifications sur GitHub