Vous êtes sur la page 1sur 7

26/12/2023 08:00 debutant java: écritude de méthodes

← (précédent) B.0 Ecriture de méthodes.

B.2 Quelques mini-projets. →

Accueil ↔ S O M M A I R E

B.1 Exercices sur l'écriture de méthodes

EXERCICE 1

Ecrire une méthode qui étant donné les deux côtés (adjacent et opposé) d' un triangle rectangle, retourne son
hypothénuse.

CORRECTION 1

1. public static double hypothenuse(double adjacent, double oppose)


2. {
3. double hyp = Math.sqrt( (adjacent * adjacent) + (oppose * oppose) );
4. return hyp;
5. }

Vous vous souvenez certainement du fameux théorème de pythagore : Dans un triangle rectangle, le carré de l'
hypothénuse est égale à la somme des carrés des 2 autres côtés. Donc l' hypothénuse est égale à la racine carré des
la somme des carrés des 2 autres côtés.

Les arguments sont donc les 2 côtés. Et le résultat fourni (renvoyé, retourné) est donc l' hypothénuse.

EXERCICE 2

Ecrire une méthode qui étant donné un nombre réel, renvoie sa valeur absolue

CORRECTION 2

1. public static double valeurAbsolue(double a)


2. {
3. if( a > 0)
4. {
5. return a;
6. }
7. else
8. {
9. return -a;
10. }
11. }

Avant toute chose, sachez que vous n' avez pas besoin d' écrire une méthode qui existe déjà. Et la méthode qui retourne
la valeur absolue d' un nombre réel existe déjà. C' est la méthode abs() de la classe Math. Vous vous souvenez ? Sinon,
regardez par ici

www.neophytes.info/java/b1.html 1/7
26/12/2023 08:00 debutant java: écritude de méthodes

Si j' ai voulu écrire cette méthode, c' est pour vous montrer qu' on peut avoir dans une méthode, 2 instructions return.
Mais attention, ça ne veut pas dire qu' une méthode peut retourner 2 valeurs. Jamais, jamais, jamais. Une méthode
retourne toujours une et une seule valeur. Mais comme vous pouvez le voir, les 2 instructions sont dans une structure
conditionnelle. La valeur absolue de a sera a si a est positif et -a dans le cas où a est négatif. Donc, en fin de compte,
une seule valeur sera retournée.

Mais il y a une exception qui n'en est pas vraiment une.


Une méthode peut renvoyer un objet. Si c'est un tableau, alors oui, dans ce cas, une méthode peut retourner plusieurs
valeurs. Mais remarquez qu'en réalité, un seul objet est retourné. Il vaut mieux dire alors qu'
une méthode renvoie une seule entité et une seule

Bien entendu, les méthodes ne sont pas toutes de type double avec des arguments de type double. A partir de
maintenant, nous allons varier les plaisirs.

EXERCICE 3

Ecrire une méthode qui, étant donné un tableau de nombres entiers et un nombre entier quelconque, teste la présence
de ce nombre dans ce tableau.

Lorsque vous verrez un exercice sur les méthodes avec les mots (teste, ou vérifie, ou permet de savoir si), sachez que
vous avez affaire une méthode de type booléen. Mais attention, ne vous concentrez pas sur ces mot ou expressions
pour dire qu' une méthode est de type booléenne. Il s' agit surtout de réfléchir un peu en se posant la question suivante.
L' énoncé de l' exercice pose-t-elle une question à laquelle il faut forcément répondre par vrai ou par faux ? Si c' est le
cas, alors, la méthode est de type booléenne.

Ici, l' énoncé permet de se poser la question suivante : Ce nombre entier est-il dans le tableau de nombres entiers ?
Réponse = vrai ou faux.
Donc, méthode de type booléenne. Et le type booléen en java utilise le mot clé boolean.

correction 3
1. public static boolean nombreDansTableau(int a, int [] tab)
2. {
3. boolean verite = false;
4. for(int i = 0; i < tab.length; i++)
5. {
6. if(tab[i] == a)
7. {
8. verite = true;
9 . break;
10. }
11. }
12. return verite;
11. }

Lorsque nous devons écrire une méthode booléenne, nous devons définir une variable booléenne. Le type d' une
méthode c' est le type de la valeur retournée. Donc, dans la définition d' une méthode, nous devons définir une variable
booléenne : ligne 3. Je l' ai initialisée à false pour une raison que j' indique ci-dessous.
Puis je parcours le tableau du premier au dernier élément (ligne 4). En disant que si l' élément actuel a la même valeur
que la variable a, alors verite (variable bolléenne) est égale à true. Puisque effectivement, cela veut dire que la réponse
à la question qu' on se pose est :Vrai Et dans ce cas, on sort de la boucle (break, ligne 9). Puisque si on a trouvé au
moins un élément du tableau dont la valeur est celle de a, il est inutile de comparer a avec les autres éléments. Raison
pour laquelle on initialise à false. Ainsi, on n' est pas obligé de parcourir tout le tableau, au cas où on trouve avant la
fin, un élément qui correspond.
Puis on retourne la variable booléenne verite..

C' est bien beau de savoir écrire une méthode. Mais encore faut-il savoir l' utiliser. On peut utiliser une méthode dans
la méthode main() Cas le plus fréquent. Mais on peut aussi l' utiliser dans une autre méthode. Commençons d' abord
par utiliser les méthodes écrites ci-dessus dans une méthode main()

1. public class TesterMethodes


2. {
www.neophytes.info/java/b1.html 2/7
26/12/2023 08:00 debutant java: écritude de méthodes
3. public static void main(String [] args)
4. {
5. System.out.println("carré de 5.0 = " + carre(5.0));
6. System.out.println();
7. double a = carre(6.0);
8. System.out.println("carré de 6 = " + a);
9. System.out.println();
10. int x = 12;
11. System.out.println("carré de x = " + carre(x));
12. System.out.println();
13. double p = f(5.2, 3);
14. System.out.println(" 5.2 X 3 = " + p);
15. System.out.println();
16. System.out.println("valeur absolue de - 9 = " + valeurAbsolue(- 9));
17. System.out.println();
18. double adjacent = 4.0, oppose = 3.0;
19. System.out.println("cotés = 4 et 3, hypothénuse = " + hyp(4.0, 3.0));
20. System.out.println();
21. int nombre = 5;
22. int [] tab = {2, 6, 5, 9, 11};
23. System.out.println(nombreDansTableau(nombre, tab));
24. }
25.
26. //méthode permettant de fournir le carré d 'un nombre réel
27. public static double carre(double x)
28. {
29. double y = x * x;
30. return y;
31. }
32.
33. // méthode permettant de fournir la produit de deux nombres réels
34. public static double f(double x, double y)
35. {
36. double z = x * y;
37. return z;
38. }
39. // méthode permettant de fournir la valeur absolue d' un nombre réel
40. public static double valeurAbsolue(double a)
41. {
42. if( a > 0)
43. {
44. return a;
45. }
46. else
47. {
48. return -a;
49. }
50. }
51. //méthode permettant de fournir l' hypothénuse d' un triangle rectangle.
52. public static double hyp(double adjacent, double oppose)
53. {
54. double hypot = Math.sqrt( (adjacent * adjacent) + (oppose * oppose) );
55. return hypot;
56. }
57.
58. /*méthode permettant de vérifier la présence d' un nombre entier
59. dans un tableau de nombres entiers.*/
59. public static boolean nombreDansTableau(int a, int [] tab)
60. {
61. boolean verite = false;
62. for(int i = 0; i < tab.length; i++)
63. {
64. if(tab[i] == a)
65. {
66. verite = true;
67. break;
68. }
69. }
70. return verite;
71. }
72. }

Lorsque vous écrivez une méthode dans la classe contenant la méthode main(), je vous conseillerais de mettre cette
méthode sous la méthode main(). Ce n' est pas une obligation. Mais je trouve logique de voir d' abord main() puisque c'
est elle qui contient toutes les instructions du programme.
Je vous rappelle que lorsqu' on utilise une fonction dans la classe où elle est définie, on invoque tout simplement le

www.neophytes.info/java/b1.html 3/7
26/12/2023 08:00 debutant java: écritude de méthodes

nom de la méthode. Lorsqu' on utilise une méthode, on dit qu' on appelle cette méthode. Ainsi, j' appelle sur la ligne 5,
la méthode carre() déclarée ligne 27. Il existe diverses façons d' appeler une méthode.
L' expression carre(5.0) représente la valeur 25.0 parce que la méthode carre() retourne le carré de la valeur qui se
trouve dans ses parenthèses. C' est pourquoi vous verrez à l' affichage : le carre de 5.0 = 25.0
L' expression double a = carre(6.0); signifie mettre 36.0 (représenté par l' expression carre(6.0) dans la variable a. C'
est pourquoi vous verrez à l' affichage : le carre de 6.0 = 36.0
L' expression carre(x) veut dire, prendre la valeur de x (ici = 12, ligne 10), puis calculer son carré grâce à la méthode
carre(). C' est pourquoi vous verrez à l' affichage : le carre de x = 144.0
Utilisez le même raisonnement pour compredre les autres lignes de code jusqu' à ligne 19.
Pour la méthode de type booléenne nombreDansTableau(), c' est encore le même raisonnement. Sauf qu' ici, ce n' est
pas un nombre qui s' affiche. Plutôt la valeur true. Puisque la méthode retourne une valeur booléenne. Vous voyez bien
que la valeur 5 se trouve bien dans le tableau.

Exercice à faire. Changer la valeur de nombre en donnant par exemple la valeur 55. Vous verrez afficher false
parce que 55 n' est pas une valeur du tableau

EXERCICE 4

Ecrire une méthode qui, étant donné une chaine de caractères et un caractère quelconque, teste la présence de ce
caractère dans cette chaine.

CORRECTION 4

1. public static boolean caractereDansChaine(String chaine, char c)


2. {
3. boolean verite = false;
4. for(int i = 0; i < chaine.length(); i++)
5. {
6. if(chaine.charAt(i) == c)
7. {
8. verite = true;
9. break;
10. }
11. }
12. return verite;
13. }

C' est du déjà vu non ? Je déclare ma variable booléenne avant la boucle. Car une variable déclarée dans la boucle
disparaît en sortie de boucle. Or c' est la variable à retourner. Puis je parcours la chaine pour voir si un caractère en
position i de la chaine correspond au caractère. Si c' est oui, verite = true. Puis on sort aussitôt de la boucle dès qu' on
trouve ce caractère. Si ce n' est pas le cas, la valeur reste à false comme déclarée. L' intérêt d' initialiser la variable à
false vient de ce que on est pas obliger de faire le else après le if. Puisque le else correspond déjà à la situation où cette
valeur est false.

Rappel : La méthode charAt() de la classe String renvoie le caractère dont la position dans la chaine est représentée par
le nombre entier dans les parenthèses. chaine.charAt(2) est le caractère situé en position 2 de chaine. Autrement dit, le
troisième caractère du contenu de la variable chaine.

Rappel : Les valeurs booléennes (true ou false) ne sont pas faites pour être affichées. On utilise leur existence surtout
dans des structures conditionnelles if...else.

En fait, pas besoin d'écrire cette méthode. Elle existe déjà. C'est la méthode indexOf() de la classe String. Comment
l'utiliser ?

char c = 'z'; String s = new String("zaroskyé); Nous savons que s.indexOf(c) retourne le numéro de la position de c
dans s. Ici, c'est 0 (zéro).
Si le caractère n'existe pas dans la chaine de caractères, le numéro est -1. Donc, dans un programme, vous écrirez par
exemple :
if (s.indexOf(c) == -1)
{ ... suite des instructions}

Quelqu'un m'a dit qu'il vaut mieux écrire :

www.neophytes.info/java/b1.html 4/7
26/12/2023 08:00 debutant java: écritude de méthodes
if (s.indexOf(c) < 0)
{ ... suite des instructions}

J'ai demandé pourquoi ? ... Il m'a dit qu'il est possible que ça donne un nombre inférieur à zéro qui n'est pas - 1.
ça ne s'est jamais vérifié sur mon PC. Mais j'ai quand même pris l'habitude d'écire < 0 au lieu de == - 1.

EXERCICE 5

Copiez la méthode caractereDansChaine() ci-dessus et collez là dans la classe TesterMethodes ci-dessus. Puis dans la
méthode main(), collez le code ci-dessous après la ligne 23 de cette classe.

CORRECTION 5
char t = 'N'; String nom = "KENNEDY";
if(caractereDansChaine(nom, t))
{
System.out.println("Le caractere " + t + " se trouve bien dans " + nom);
}
else
{
System.out.println("Le caractere " + t + " ne se trouve pas dans " + nom);
}

Compilez puis exécutez. Vous verrez afficher : Le caractere N se trouve bien dans KENNEDY

Ensuite, changez 'N' en 'n'. Vous verrez afficher Le caractere n ne se trouve pas dans KENNEDY

Ce qui est normal. Le langage java est sensible à la casse. Il fait la différence entre majuscule et minucule. n est
différent de N

L' expression caractereDansChaine(nom, t) représente la valeur true si la valeur de la variable t (ici, 'N') se trouve bien
dans la valeur de la variable chaine (ici, KENNEDY). Cette valeur est alors true.

IMPORTANT !
Lorsqu' on utilise une méthode définie avec deux arguments, on l' utilise en y mettant deux valeurs dont les types
correspondent à ceux des arguments.

Exemple : La méthode caractereDansChaine() a été définie (exercice 6) avec 2 arguments : le premier, un variable de
type String et le deuxième, une variable de type char. Donc, quand je l' utilise (l' appelle), je respecte l' ordre et la
nature des valeurs. Regardez CORRECTION 7 de l' EXERCICE 7 : if(caractereDansChaine(nom, t)). nom est de type
String et t est de type char. Si je m' amuse à faire : if(caractereDansChaine(t, nom)) Message d' erreur à la compilation.

Autant on a l' obligation absolue de respecter l' ordre des arguments. L' obligation de respecter la nature est plutôt
relative. En effet, je vous ai déjà dit qu' en Java, il existe la notion de conversion implicite. Si une méthode requiert
comme argument, une variable de type double, vous pouvez utiliser byte, short, int, long et float. Car ces types sont
tous convertibles implicitement en double.

EXERCICE 6

Ecrire une méthode permettant d' afficher un menu. N' importe lequel. Choisissez les thèmes.

CORRECTION 6

1. public static void afficheMenuBanque()


2. {
3. System.out.println("Que voulez-vous faire ? ");
4. System.out.println();
5. System.out.println("1. Retrait avec ticket. 2. Retrait sans ticket");
6. System.out.println("3. Consultation Solde. 4. Historique");
7. System.out.println("5. Dernières opérations. 6. Autre");
8. }

Il me semble que toute personne ayant utilisé une carte de crédit a vu quelque chose de similaire. Pas forcément la
même chose bien sûr. Lorsque une méthode est de type void, elle ne renvoie (retourne, fournit) aucune valeur. On ne
www.neophytes.info/java/b1.html 5/7
26/12/2023 08:00 debutant java: écritude de méthodes

peut donc pas s' amuser à écrire a = afficheMenuBanque(); Quelque soit le type de a. Puisqu' il n' y a pas de return, rien
se sera affectée à la variable a. Pire, y aura même afficha d' un message d' erreur.
Ici, il n' y a pas non plus d' argument. Donc, on n' utilise pas la méthode en y mettant quelque chose. Message d' erreur
aussi si on tente d' y mettre une valeur.
Comment appelle-t-on (utilise-t-on) une méthode de type void ? On écrit simplement le nom de la méthode. Ici, il
suffit d' écrire : afficheMenuBanque(); Et le tour est joué. Il s' affiche alors le menu décrit dans la définition de la
méthode.

Attention : une méthode de type void ne possède pas forcément zéro arguments.

EXERCICE 7

Ecrire une méthode qui, étant donné un tableau de chaines, affiche chacune des valeurs sur une ligne valeurs

CORRECTION 7

1. public static void afficheTableau(String [] tab)


2. {
3. for(int i = 0; i < tab.length; i++)
4. {
5. System.out.println(tab[i]);
6. }
7. }

Vous voyez ? Pour utiliser cette méthode, il suffit d' écrire : afficheTableau(nom)
nom étant le nom de la variable tableau dont on cherche à afficher les valeurs. Autre exemple.

EXERCICE 8

Ecrire une méthode qui, étant donné un tableau d' entiers, affiche les valeurs du tableau sur la même ligne

CORRECTION 8

1. public static void afficheTableau(int [] tab)


2. {
3. for(int i = 0; i < tab.length; i++)
4. {
5. System.out.print(tab[i] + " ");
6. }
7. }

Pour utiliser cette méthode, il suffit d' écrire : afficheTableau(ent)


ent étant le nom de la variable tableau dont on cherche à afficher les valeurs. Dans ce genre d' exercice, afficher sur
une même ligne les valeurs d' un tableau oblige à utiliser System.out.print() plutôt que sa variante avec ln à la fin. Et je
suis sûr que vous avez compris pourquoi.

La connaissance, c'est bien. La partager, c'est mieux

Conseiller ce site à un(e) ami(e):

Son e-mail est : Envoyer

Une suggestion à faire pour ce site ? ... Contact : webmaster@debutantprog.com

← (précédent) B.0 Ecriture de méthodses.

www.neophytes.info/java/b1.html 6/7
26/12/2023 08:00 debutant java: écritude de méthodes

B.2 Quelques mini-projets. →

Accueil ↔ S O M M A I R E

B.1 Ecriture de méthodes

www.neophytes.info/java/b1.html 7/7

Vous aimerez peut-être aussi