Programmation Java — UCB BAC1 2026
Chapitres 4 et 5 — Exercices corrigés
Chapitre 4 — Chaînes, ArrayList et Énumérations
Exercice 4.1 — Manipulation de la classe String
Objectif : lire une chaîne et compter séparément les voyelles et les consonnes avec length() et
charAt(i).
Fichier : Exercice4_1.java
public class Exercice4_1 {
public static void main(String[] args) {
String chaine = "Programmation";
int voyelles = 0, consonnes = 0;
String v = "aeiouAEIOU";
for (int i = 0; i < [Link](); i++) {
char c = [Link](i);
if ([Link](c)) {
if ([Link](c) != -1) voyelles++;
else consonnes++;
}
}
[Link]("Voyelles : " + voyelles);
[Link]("Consonnes : " + consonnes);
}
}
💡 length() retourne la taille de la chaîne. charAt(i) retourne le caractère à l'indice i. indexOf(c) retourne -1 si
le caractère est absent.
Exercice 4.2 — Utilisation dynamique d'ArrayList
Objectif : manipuler une ArrayList<String> avec add(), remove(), set() et size().
Fichier : Exercice4_2.java
import [Link];
public class Exercice4_2 {
public static void main(String[] args) {
ArrayList<String> liste = new ArrayList<String>();
[Link]("Alice");
[Link]("Bob");
[Link]("Claire");
[Link]("David");
[Link]("Eve");
[Link](1); // Supprime "Bob"
[Link]([Link]() - 1, "Emma"); // Modifie le dernier
[Link]("Taille : " + [Link]());
[Link](liste);
}
}
💡 Contrairement aux tableaux, ArrayList est dynamique : sa taille change automatiquement. remove(1)
supprime l'élément à l'indice 1.
Exercice 4.3 — Types Énumérés (Enum)
Objectif : créer une énumération Jour et parcourir ses valeurs avec values() et ordinal().
Fichier : Exercice4_3.java
public class Exercice4_3 {
enum Jour {
LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE
}
public static void main(String[] args) {
for (Jour j : [Link]()) {
[Link]([Link]() + " - " + j);
}
}
}
💡 values() retourne tous les membres de l'énumération. ordinal() retourne la position (0 pour LUNDI, 1 pour
MARDI, etc.).
Chapitre 5 — Gestion des Exceptions
Exercice 5.1 — Exception implicite (ArithmeticException)
Objectif : intercepter une division par zéro avec un bloc try / catch.
Fichier : Exercice5_1.java
import [Link];
public class Exercice5_1 {
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Numerateur : ");
int a = [Link]();
[Link]("Denominateur : ");
int b = [Link]();
try {
int resultat = a / b;
[Link]("Resultat : " + resultat);
} catch (ArithmeticException e) {
[Link]("Erreur : division par zero impossible.");
}
}
}
💡 ArithmeticException est une exception implicite (non vérifiée). Elle est levée automatiquement par la JVM
lors d'une division par zéro.
Exercice 5.2 — Exception explicite personnalisée
Objectif : créer une classe ErrDepl extends Exception et la lever avec throw new ErrDepl().
Fichier : [Link]
public class ErrDepl extends Exception {
public ErrDepl() {
super("Coordonnees negatives interdites.");
}
}
Fichier : [Link]
public class PointAvecException {
private int x, y;
public PointAvecException(int x, int y) {
this.x = x;
this.y = y;
}
public void deplacer(int dx, int dy) throws ErrDepl {
if (dx < 0 || dy < 0) {
throw new ErrDepl();
}
this.x += dx;
this.y += dy;
}
}
Fichier : Exercice5_2.java (fichier à compiler et exécuter)
public class Exercice5_2 {
public static void main(String[] args) {
PointAvecException p = new PointAvecException(3, 5);
try {
[Link](2, -1); // declenche ErrDepl
} catch (ErrDepl e) {
[Link]("Exception : " + [Link]());
}
}
}
💡 throws dans la signature indique que la méthode peut lever cette exception. throw new ErrDepl() la
déclenche effectivement.
Exercice 5.3 — Redéclenchement et propagation
Objectif : intercepter une exception dans un bloc catch, afficher un message, puis la redéclencher
vers l'appelant avec throw e.
Fichier : Exercice5_3.java
public class Exercice5_3 {
static void operationRisquee() throws ArithmeticException {
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
[Link]("Interception locale : " + [Link]());
throw e; // redeclenchement vers l'appelant
}
}
public static void main(String[] args) {
try {
operationRisquee();
} catch (ArithmeticException e) {
[Link]("Interception dans main : " + [Link]());
}
}
}
💡 throw e redéclenche l'exception déjà capturée. throws dans la signature de la méthode est obligatoire
pour informer l'appelant.
Résumé — Fichiers à compiler
Pour chaque exercice, compiler et exécuter uniquement le fichier principal :
Exercice 4.1 : javac Exercice4_1.java → java Exercice4_1
Exercice 4.2 : javac Exercice4_2.java → java Exercice4_2
Exercice 4.3 : javac Exercice4_3.java → java Exercice4_3
Exercice 5.1 : javac Exercice5_1.java → java Exercice5_1
Exercice 5.2 : javac Exercice5_2.java → java Exercice5_2
Exercice 5.3 : javac Exercice5_3.java → java Exercice5_3