Exercice 1 sur 7
⚔️ Défi : carte de profil
C'est l'heure de tester ce que tu sais ! Utilise tout ce que tu as appris jusqu'ici.
Crée des variables pour une carte de profil et affiche-les comme ceci :
Nom : Java-Dev
Âge : 20
Langage : Java
Les variables sont déjà là. Tu n'as qu'à ajouter les trois lignes println.
Code de départ
void main() {
String nom = "Java-Dev";
int age = 20;
String langage = "Java";
// Affiche ces trois lignes :
// Nom : Java-Dev
// Âge : 20
// Langage : Java
}
Contexte
Pourquoi des défis ?
On n'apprend pas à programmer en lisant, on apprend en résolvant activement des problèmes. Les défis combinent plusieurs notions, exactement comme de vraies tâches de programmation.
Dans la vraie vie, tu ne vas jamais créer juste une variable isolée. Tu vas combiner des variables avec de l'affichage, des calculs et des conditions. Ces défis te préparent à ça.
Exercice 2 sur 7
⚔️ Défi : suite de nombres
Combine les boucles et les conditions !
Affiche les nombres de 1 à 20, mais saute tous les nombres divisibles par 3.
Sortie attendue :
1 2 4 5 7 8 10 11 13 14 16 17 19 20
Astuce : utilise continue;, qui saute le reste du tour de boucle en cours.
Code de départ
void main() {
for (int i = 1; i <= 20; i++) {
// Saute les nombres divisibles par 3
IO.print(i + " ");
}
}
Contexte
break et continue
break; quitte toute la boucle. continue; saute seulement le tour en cours et passe directement au suivant.
Dans des boucles imbriquées, les deux n'agissent que sur la boucle la plus intérieure. Avec des étiquettes (labels), tu peux aussi viser les boucles extérieures : exterieure: for (...) { ... break exterieure; }
Exercice 3 sur 7
⚔️ Défi : Mini-calculatrice
Écris une méthode calculer qui reçoit deux nombres et un opérateur, et qui renvoie le résultat.
Opérateurs pris en charge : +, -, *
Sortie attendue :
15
3
54
Code de départ
int calculer(int a, int b, char op) {
// Renvoie a+b, a-b ou a*b
// selon op ('+', '-' ou '*')
return 0;
}
void main() {
IO.println(calculer(10, 5, '+'));
IO.println(calculer(10, 7, '-'));
IO.println(calculer(6, 9, '*'));
}
Contexte
char — le type caractère
char stocke un seul caractère sur 2 octets (pour être précis, une unité de code UTF-16 — certains caractères comme les emojis en ont besoin de deux). Les chars s'écrivent entre apostrophes simples : 'A'. Les chaînes de caractères s'écrivent entre guillemets doubles : "A".
Comme char est un type primitif, tu peux bel et bien utiliser == pour comparer ici. Ça ne marche pas avec les chaînes !
Exercice 4 sur 7
⚔️ Défi : Bulletin de notes
Crée une classe Eleve avec :
- un attribut
nom (String)
- un attribut
note (int, à l'allemande : 1 = la meilleure, 6 = la pire — pas sur 20 !)
- un constructeur qui définit les deux
- une méthode
resultat() qui renvoie "admis" si la note est ≤ 4, sinon "recalé"
Sortie attendue :
Emma: admis
Hugo: recalé
Code de départ
void main() {
Eleve a = new Eleve("Emma", 2);
Eleve b = new Eleve("Hugo", 5);
IO.println(a.nom + ": " + a.resultat());
IO.println(b.nom + ": " + b.resultat());
}
class Eleve {
String nom;
int note;
// Constructeur
// Méthode resultat() -> "admis" ou "recalé"
}
Contexte
Encapsulation
Dans du vrai code Java, les attributs seraient private et accessibles uniquement via des getters/setters. Ça s'appelle l'encapsulation — c'est toi qui contrôles comment le monde extérieur accède à tes données.
Exemple : un setter pour note pourrait vérifier que la valeur est entre 1 et 6. Sans encapsulation, n'importe qui pourrait écrire e.note = -5;.
Exercice 5 sur 7
ArrayList
Les tableaux ont une taille fixe. Une ArrayList, elle, peut grandir :
ArrayList<String> liste = new ArrayList<>();
liste.add("Bonjour");
liste.add("le monde");
liste.size(); // 2
Ajoute le nombre 30 à la liste pour que sa taille passe à 3.
Code de départ
import java.util.ArrayList;
void main() {
ArrayList<Integer> nombres = new ArrayList<>();
nombres.add(10);
nombres.add(20);
// Ajoute 30
IO.println(nombres.size());
}
Contexte
Génériques et classes enveloppes
ArrayList<Integer> : le <Integer> est un générique. Il fixe le type que la liste contient. Les génériques t'empêchent d'y glisser par erreur le mauvais type.
Pourquoi Integer et pas int ? Les génériques ne marchent qu'avec des types objet. Integer est la classe enveloppe (wrapper) de int. Java convertit automatiquement entre les deux (autoboxing/unboxing).
Exercice 6 sur 7
Try-Catch
Parfois, ça part en vrille, par exemple quand tu essaies de transformer "abc" en nombre.
Avec try-catch, tu attrapes l'erreur au lieu de laisser ton programme planter :
try {
// Code qui peut échouer
} catch (Exception e) {
// Ce qu'on fait si ça échoue
}
Entoure la ligne qui plante d'un try-catch et affiche Erreur ! si quelque chose tourne mal.
Code de départ
void main() {
String texte = "abc";
// Entoure la ligne suivante d'un try-catch
// En cas d'erreur : affiche "Erreur !"
int nombre = Integer.parseInt(texte);
IO.println(nombre);
}
Contexte
Exceptions vérifiées et non vérifiées
Java en a deux sortes : les exceptions vérifiées (checked, par ex. IOException) doivent être explicitement attrapées ou déclarées. Les exceptions non vérifiées (unchecked, par ex. NumberFormatException, NullPointerException) non.
En pratique, beaucoup de frameworks n'utilisent que des exceptions non vérifiées. La règle des checked exceptions de Java est controversée : d'autres langages (Kotlin, C#) ne l'ont tout simplement pas.
Exercice 7 sur 7
FizzBuzz
L'exercice d'entretien d'embauche le plus célèbre de tous les temps.
Affiche les nombres de 1 à 15, mais :
- Divisible par 3 →
Fizz
- Divisible par 5 →
Buzz
- Divisible par 3 et par 5 →
FizzBuzz
- Sinon → le nombre
Astuce : vérifie d'abord le cas FizzBuzz (divisible par 15) !
Astuce 2 : % te donne le reste. 15 % 3 == 0 veut dire « 15 est divisible par 3 ».
Code de départ
void main() {
for (int i = 1; i <= 15; i++) {
// Ta chaîne de if-else va ici
IO.println(i);
}
}
Contexte
FizzBuzz : plus qu'un exercice
FizzBuzz est célèbre parce qu'en entretien d'embauche, il montre si quelqu'un maîtrise les bases de la programmation. La solution demande des boucles, des conditions et le modulo, et surtout le bon ordre des vérifications.
Anecdote : il existe des centaines de solutions créatives, avec des streams, du pattern matching, ou même sans if/else. Cherche « FizzBuzz Enterprise Edition » pour la version délirante et sur-architecturée.