Java Fonctions Simple
Java Fonctions Simple
1
Introduction
Bienvenue ! Dans ce livre, tu vas apprendre à utiliser les fonctions en Java. Tu connais déjà les
variables et les tableaux. Maintenant, on va apprendre à organiser le code.
2
Chapitre 1 — C'est quoi une fonction ?
■ Cours
L'analogie du bouton micro-ondes
Imagine un micro-ondes. Il a un bouton "Réchauffer 1 minute". Tu appuies dessus et il fait tout
seul : allumer la lumière, faire tourner le plateau, chauffer 60 secondes, biper. Tu n'as pas besoin
de savoir comment ça marche à l'intérieur. Tu appuies sur le bouton, ça fait le travail.
Une fonction en Java, c'est pareil. C'est un bouton que tu crées toi-même, qui fait un travail
précis. Tu appelles ce bouton quand tu en as besoin.
↑↑↑↑
■ La fonction doit être DEHORS du main, mais DANS la classe. Le main APPELLE la
fonction avec son nom suivi de ().
3
Tu peux donner des informations à ta fonction, comme donner un nom au micro-ondes pour qu'il
affiche "Bonjour [ton nom] !". Ces informations s'appellent des paramètres.
// Dans le main :
saluer("Steve"); // affiche : Bonjour Steve !
saluer("Alex"); // affiche : Bonjour Alex !
// Dans le main :
int resultat = additionner(3, 5);
[Link](resultat); // affiche : 8
✏■ Exercices — Chapitre 1
✏■ Exercice 1 — Ma première fonction
Énoncé : Crée une fonction 'afficherBienvenue()' qui affiche 'Bienvenue dans Epicrafter Journey
!'. Appelle-la dans le main.
Résultat attendu : Bienvenue dans Epicrafter Journey !
Indice : C'est une fonction void (elle n'a rien à retourner). Écris-la AVANT le main.
Mon code :
4
✏■ Exercice 2 — Fonction avec un paramètre
Énoncé : Crée une fonction 'saluer(String nom)' qui affiche 'Bonjour [nom] !'. Appelle-la avec
'Steve' puis 'Alex'.
Résultat attendu : Bonjour Steve ! Bonjour Alex !
Indice : Mets String nom entre les parenthèses. Utilise nom dans le println.
Mon code :
Énoncé : Crée une fonction 'doubler(int n)' qui retourne n * 2. Affiche le résultat pour n=7.
Résultat attendu : Résultat : 14
Indice : Remplace void par int. Utilise return n * 2;
Mon code :
Énoncé : Crée une fonction 'afficherEtoiles(int nb)' qui affiche une ligne d'étoiles. Appelle-la
avec 3, 5 et 7.
Résultat attendu : *** ***** *******
Indice : Utilise '*'.repeat(nb) pour créer les étoiles.
Mon code :
Énoncé : Crée une fonction 'estPair(int n)' qui retourne true si n est pair, false sinon. Teste avec
4 et 7.
5
Résultat attendu : 4 est pair : true 7 est pair : false
Indice : Un nombre est pair si n % 2 == 0. Le type de retour est boolean.
Mon code :
Énoncé : Crée une fonction 'afficherJoueur(String nom, int niveau)' et appelle-la 3 fois avec des
données différentes.
Indice : Deux paramètres : un String et un int. Utilise-les tous les deux dans le println.
Mon code :
Énoncé : Crée une fonction 'calculerPrix(double prix, int quantite)' qui retourne le total. Teste
avec prix=5.99 et quantite=3.
Résultat attendu : Total : 17.97
Indice : Type de retour : double. return prix * quantite;
Mon code :
Énoncé : Crée une fonction 'getMax(int a, int b)' qui retourne le plus grand. Affiche le résultat
dans un println.
Résultat attendu : Le plus grand est : 12
Indice : Tu peux écrire : [Link](getMax(7, 12));
Mon code :
6
✏■ Exercice 9 — Retourner un String
Énoncé : Crée une fonction 'creerMessage(String pseudo, int score)' qui retourne 'Bravo
[pseudo] ! Score : [score]'.
Résultat attendu : Bravo Steve ! Score : 1250
Indice : Type de retour : String. return 'Bravo ' + pseudo + ...
Mon code :
Énoncé : Crée 3 fonctions : afficherTitre() void, calculerNiveau(int xp) qui retourne xp/100, et
afficherFiche(String nom, int xp) qui appelle calculerNiveau. Utilise-les dans le main.
Indice : Les fonctions peuvent s'appeler entre elles. afficherFiche peut appeler calculerNiveau à l'intérieur.
Mon code :
7
Chapitre 2 — Paramètres et retour de valeurs
■ Cours
Passage par valeur — l'analogie de la photocopie
Quand tu passes une variable à une fonction, Java fait une photocopie de ta variable. La
fonction travaille sur la copie. L'original ne change pas.
Retourner un tableau
Une fonction peut aussi retourner un tableau. Le type de retour s'écrit avec des crochets : int[]
ou String[].
// Dans le main :
8
String[] monEquipe = creerEquipe("Steve", "Alex");
[Link](monEquipe[0]); // Steve
✏■ Exercices — Chapitre 2
✏■ Exercice 11 — Retour et réaffectation
Énoncé : Crée une fonction 'augmenterScore(int score, int bonus)' qui retourne score + bonus.
Dans le main, applique-la sur une variable score = 100 avec bonus = 50.
Résultat attendu : Score avant : 100 Score après : 150
Indice : Pour que score change, écris : score = augmenterScore(score, 50);
Mon code :
Énoncé : Crée une fonction 'multiplier(int a, int b)' et une fonction 'carre(int n)' qui utilise
multiplier pour retourner n*n.
Résultat attendu : Carré de 5 : 25
Indice : Dans carre, appelle multiplier(n, n) et retourne le résultat.
Mon code :
Énoncé : Crée une fonction 'creerInventaire(String obj1, String obj2, String obj3)' qui retourne un
tableau String de 3 éléments.
Indice : Type de retour : String[]. Crée le tableau dans la fonction et retourne-le.
Mon code :
9
Énoncé : Déclare vie = 100. Crée une fonction 'reduireVie(int v, int degats)' qui retourne v -
degats. Montre d'abord sans réaffecter (vie reste 100), puis avec réaffectation.
Résultat attendu : Sans réaffectation : 100 Avec réaffectation : 75
Indice : Appelle d'abord sans sauvegarder. Puis : vie = reduireVie(vie, 25);
Mon code :
Énoncé : Crée une fonction 'moyenne(int a, int b, int c)' qui retourne la moyenne des 3 entiers
en double. Teste avec 80, 90, 70.
Résultat attendu : Moyenne : 80.0
Indice : Type de retour : double. Calcule (a + b + c) / 3.0 (le .0 force le résultat en décimal).
Mon code :
Énoncé : Crée une fonction 'decrireMonstre(String nom, int pv, boolean estBoss)' qui retourne
une description complète.
Résultat attendu : Dragon | PV: 500 | Boss: true
Indice : Type de retour : String. Concatène tous les paramètres dans un message.
Mon code :
Énoncé : Crée une fonction 'estNiveauValide(int niveau)' qui retourne true si niveau est entre 1
et 100.
Résultat attendu : Niveau 5 valide : true Niveau 150 valide : false
Indice : Utilise && : return niveau >= 1 && niveau <= 100;
Mon code :
10
✏■ Exercice 18 — Chaine de fonctions
Énoncé : Crée calculerAttaque(int base, int bonus) et calculerDefense(int base, int bonus). Puis
afficherCombat(int attJ, int defE, int attE, int defJ) qui utilise les deux fonctions.
Indice : afficherCombat appelle calculerAttaque et calculerDefense à l'intérieur.
Mon code :
Énoncé : Crée une fonction 'nomComplet(String prenom, String nom)' qui retourne 'NOM,
Prenom' (nom en majuscules avec toUpperCase()).
Résultat attendu : CRAFTER, Epic
Indice : return [Link]() + ', ' + prenom;
Mon code :
Mon code :
11
Chapitre 3 — La surcharge (même nom, paramètres
différents)
■ Cours
L'analogie du café
Au café, tu peux commander "un café", "un café avec du sucre", ou "un café avec du sucre et du
lait". C'est toujours un café, mais la commande change selon ce que tu précises. En Java, c'est
pareil : même nom de fonction, mais des paramètres différents.
Exemple de surcharge
// Version 1 : avec 2 paramètres
public static int additionner(int a, int b) {
return a + b;
}
■ Invalide : même nom, mêmes paramètres, juste le type de retour qui change
✏■ Exercices — Chapitre 3
✏■ Exercice 21 — Surcharge simple
Énoncé : Crée deux versions : 'afficher(int n)' affiche 'Entier : n', 'afficher(double n)' affiche
'Décimal : n'. Teste les deux.
Résultat attendu : Entier : 42 Décimal : 3.14
Indice : Même nom, types différents. Java choisit selon ce que tu passes.
Mon code :
12
✏■ Exercice 22 — Surcharge par nombre
Mon code :
Mon code :
Énoncé : Crée 'saluer(String nom)' et 'saluer(String nom, int niveau)'. La 2e affiche aussi le
niveau.
Indice : La 1re version affiche juste le nom, la 2e affiche le nom ET le niveau.
Mon code :
Énoncé : Crée 'soigner(int pv, int soin)' qui ne dépasse pas 100, et 'soigner(int pv, int soin, int
pvMax)' qui ne dépasse pas pvMax.
Résultat attendu : PV soignés (max 100) : 95 PV soignés (max 200) : 175
Indice : Utilise [Link](pv + soin, pvMax) pour ne pas dépasser le maximum.
Mon code :
13
✏■ Exercice 26 — Afficher un item
Mon code :
Énoncé : Crée 'ajouterScore(int score, int pts)' et 'ajouterScore(int score, int pts, double mult)'.
La 2e multiplie les pts avant de les ajouter.
Résultat attendu : Score normal : 1100 Score x2 : 1200
Indice : Version 2 : return score + (int)(pts * mult);
Mon code :
Mon code :
Énoncé : Crée 'resume(int score)' qui affiche juste le score, et 'resume(int score, int niveau,
String nom)' qui affiche tout.
14
Indice : Même nom, mais la 2e version a 3 paramètres au lieu d'un.
Mon code :
Mon code :
15
Chapitre 4 — Fonctions et tableaux
■ Cours
Passer un tableau à une fonction
Tu peux passer un tableau en paramètre. On écrit le type suivi de crochets : int[] ou String[].
// Dans le main :
int[] mesScores = {100, 200, 300};
afficherScores(mesScores);
Retourner un tableau
public static int[] creerScores(int s1, int s2, int s3) {
int[] scores = {s1, s2, s3};
return scores;
}
// Dans le main :
int[] s = creerScores(450, 820, 310);
[Link](s[0]); // 450
16
■ C'est différent des int et double ! Avec un tableau, la fonction travaille sur l'original, pas
une copie.
✏■ Exercices — Chapitre 4
✏■ Exercice 31 — Passer un tableau
Énoncé : Crée une fonction 'afficherScores(int[] scores)' qui affiche les 3 premiers éléments.
Crée un tableau dans le main et passe-le.
Résultat attendu : Score 1 : 450 Score 2 : 820 Score 3 : 310
Indice : Accède aux éléments avec scores[0], scores[1], scores[2].
Mon code :
Énoncé : Crée une fonction 'somme(int[] t)' qui retourne la somme des 5 éléments.
Résultat attendu : Somme : 850
Indice : Additionne t[0]+t[1]+t[2]+t[3]+t[4] et retourne le total.
Mon code :
Énoncé : Crée une fonction 'maximum(int[] t)' qui retourne le plus grand des 5 éléments.
Résultat attendu : Maximum : 950
Indice : Commence avec max = t[0]. Compare avec chaque élément : if (t[1] > max) max = t[1]; etc.
Mon code :
Énoncé : Crée une fonction 'creerEquipe(String j1, String j2, String j3)' qui retourne un tableau
String de 3 joueurs.
17
Indice : String[] equipe = {j1, j2, j3}; return equipe;
Mon code :
Énoncé : Crée une fonction 'initTableau(int valeur)' qui retourne un tableau de 5 int, tous égaux
à valeur.
Résultat attendu : Tableau : 0 0 0 0 0
Indice : int[] t = new int[5]; t[0]=valeur; t[1]=valeur; ... return t;
Mon code :
Énoncé : Crée une fonction 'moyenne(int[] t)' qui retourne la moyenne des 5 éléments en
double.
Résultat attendu : Moyenne : 680.0
Indice : double total = t[0]+t[1]+t[2]+t[3]+t[4]; return total / 5.0;
Mon code :
Énoncé : Crée une fonction 'afficherClassement(String[] noms, int[] scores)' qui affiche 3 joueurs
avec leurs scores.
Résultat attendu : 1. Alpha - 9500 pts 2. Beta - 8200 pts 3. Gamma - 7800 pts
Indice : Utilise le même indice pour les deux tableaux : noms[0] correspond à scores[0].
Mon code :
18
✏■ Exercice 38 — Modifier un tableau
Énoncé : Crée une fonction 'ajouterBonus(int[] scores, int bonus)' qui ajoute bonus à chaque
élément. Affiche avant et après.
Résultat attendu : Avant : 100 200 300 Après : 150 250 350
Indice : Modifie directement : scores[0] += bonus; etc. Le tableau original sera changé.
Mon code :
Énoncé : Crée une fonction 'copier(int[] source)' qui retourne un NOUVEAU tableau avec les
mêmes valeurs. Modifie la copie et montre que l'original n'a pas changé.
Résultat attendu : Original : 10 20 30 Copie modifiée : 99 20 30
Indice : int[] copie = new int[3]; copie[0]=source[0]; ... return copie;
Mon code :
Mon code :
19
Chapitre 5 — Exercices de synthèse
■ Rappels rapides
void direBonjour() → fait quelque chose, retourne rien
■■ Ces exercices combinent tout ce qu'on a vu. Planifie tes fonctions avant de coder.
✏■ Exercices — Chapitre 5
✏■ Exercice 41 — Fiche de personnage
Mon code :
Énoncé : Crée : calculerDegats(int att, int def), appliquerDegats(int pv, int d), estVivant(int pv),
afficherEtat(String nom, int pv). Simule 2 rounds.
Indice : Simule : round 1 → calcule les dégâts des deux côtés → applique → affiche. Même chose round
2.
Mon code :
20
✏■ Exercice 43 — Magasin
Énoncé : Crée : afficherArticle(String nom, double prix), calculerTotal(double p1, double p2,
double p3), peutAcheter(double budget, double total). Simule un achat.
Indice : Calcule le total avec calculerTotal, puis vérifie avec peutAcheter.
Mon code :
Énoncé : Avec int[] scores = {850, 1200, 430, 990, 670}, crée : somme(int[]), maximum(int[]),
minimum(int[]), moyenne(int[]). Affiche tout.
Résultat attendu : Total : 4140 Max : 1200 Min : 430 Moyenne : 828.0
Indice : Chaque fonction fait une seule chose. Appelle-les une par une dans le main.
Mon code :
Énoncé : Crée : entete(String mission, String joueur), bonusTemps(int duree) retourne 500 si
duree<300 sinon 0, scoreFinal(int base, int enemis, int bonus). Affiche un rapport complet.
Indice : scoreFinal = base + (enemis * 50) + bonus. Appelle toutes les fonctions dans le main.
Mon code :
21
CORRECTIONS
■■ Ne lisez cette section qu'après avoir vraiment essayé chaque exercice !
Corrections — Chapitre 1
■ Correction 1 — Ma première fonction
// Dans le main :
saluer("Steve");
saluer("Alex");
22
■ Correction 4 — Appels multiples
afficherEtoiles(3);
afficherEtoiles(5);
afficherEtoiles(7);
afficherJoueur("Steve", 5);
afficherJoueur("Alex", 12);
afficherJoueur("Notch", 99);
23
■ Correction 8 — Appel dans println
[Link](creerMessage("Steve", 1250));
afficherTitre();
afficherFiche("Epicrafter", 850);
Corrections — Chapitre 2
■ Correction 11 — Retour et réaffectation
24
}
25
}
[Link](estNiveauValide(5)); // true
[Link](estNiveauValide(150)); // false
26
}
Corrections — Chapitre 3
■ Correction 21 — Surcharge simple
afficher(42);
afficher(3.14);
[Link](additionner(3, 4));
27
[Link](additionner(3, 4, 5));
[Link](additionner(3, 4, 5, 10));
[Link](attaquer(25));
[Link](attaquer(25, true));
saluer("Steve");
saluer("Alex", 7);
[Link](soigner(80, 30));
[Link](soigner(120, 80, 200));
28
■ Correction 26 — Afficher un item
afficherItem("Épée légendaire");
afficherItem("Potion", 5);
[Link](ajouterScore(1000, 100));
[Link](ajouterScore(1000, 100, 2.0));
29
public static void resume(int score, int niveau, String nom) {
[Link]("=== RÉSUMÉ ===");
[Link]("Joueur : " + nom);
[Link]("Niveau : " + niveau + " | Score : " + score);
}
Corrections — Chapitre 4
■ Correction 31 — Passer un tableau
30
int[] pts = {150,200,175,225,100};
[Link]("Somme : " + somme(pts));
int[] s = initTableau(0);
[Link](s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]);
31
public static double moyenne(int[] t) {
double total = t[0]+t[1]+t[2]+t[3]+t[4];
return total / 5.0;
}
■ Correction 37 — Classement
Un nouveau tableau est créé avec les mêmes valeurs. Modifier la copie ne change pas l'original.
public static int[] copier(int[] source) {
int[] copie = new int[3];
copie[0]=source[0]; copie[1]=source[1]; copie[2]=source[2];
return copie;
}
32
[Link]("Original : "+orig[0]+" "+orig[1]+" "+orig[2]);
[Link]("Copie : "+c[0]+" "+c[1]+" "+c[2]);
String[] p = {"Alpha","Beta","Gamma","Delta","Epsilon"};
int[] s = {9500,8200,7800,6500,5100};
[Link]("Meilleur : " + trouverMeilleur(p, s));
Corrections — Chapitre 5
■ Correction 41 — Fiche de personnage
33
public static int calculerDegats(int att, int def) { return att-def; }
public static int appliquerDegats(int pv, int d) { return pv-d; }
public static boolean estVivant(int pv) { return pv > 0; }
public static void afficherEtat(String nom, int pv) {
[Link](nom + " PV : " + pv + " | Vivant : " + estVivant(pv)
);
}
■ Correction 43 — Magasin
afficherArticle("Épée", 150.0);
double total = calculerTotal(150.0, 80.0, 25.0);
[Link]("Total : " + total);
[Link](peutAcheter(300.0, total) ? "Achat OK" : "Pas assez d'or
");
34
public static int minimum(int[] s) {
int m=s[0]; if(s[1]<m)m=s[1]; if(s[2]<m)m=s[2];
if(s[3]<m)m=s[3]; if(s[4]<m)m=s[4]; return m;
}
public static double moyenne(int[] s) { return (double)somme(s)/[Link]; }
35
Félicitations !
Tu as terminé les 45 exercices sur les fonctions !
■ Prochaine étape : les conditions (if/else) et les boucles (for/while). Bonne continuation !
36