← (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

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.     {
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 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 :
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 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 :       
Une suggestion à faire pour ce site ? ... Contact : webmaster@debutantprog.com
← (précédent) B.0 Ecriture de méthodses.
B.2 Quelques mini-projets.
Accueil S O M M A I R E

B.1 Ecriture de méthodes