~/$ cd M1207 ~/M1207$ mkdir TP4 ~/M1207$ cd TP4 ~/M1207/TP4$
public class QuatreErreurs { public static void maine(String[] args) { int[] t = new int[]{1;2;3;4}; System.out.print("["); for(int i=0;i
Le programme doit afficher [1,2,3,4]
On utilisera ici ces deux noms comme synonymes.
Les fonctions ou méthodes permettent de découper votre programme en portion de code réalisant des tâches secondaires à votre programme principal
// Un exemple de fonction en charge d'afficher bonjour à l'écran public static void bonjour() { System.out.println("Bonjour"); }
public static void bonjour() est la signature de la fonction bonjour.
public static sera expliqué au semestre prochain (public veut dire que tout le monde peut utiliser la fonction en dehors de la classe, et static veut dire que c'est une méthode de classe, i.e. commune à toutes les instances/objets de la classe). Vous verrez cela dans les prochains modules de programmation. Pour l'instant on prend pour acquis que toutes vos fonctions/méthodes commenceront par public static.
Le troisième mot clé venant après public static, ici void, est le type ou la classe renvoyé par votre fonction. Ici, votre fonction est en charge d'afficher quelque chose System.out.println("Bonjour"); donc elle ne renvoie rien (void)
Le quatrième mot venant après public static void, ici bonjour est le nom de la fonction. C'est par ce nom qu'elle sera utilisée/appelée dans votre programme.
Enfin on met entre parenthèses les arguments ou paramètres de votre fonction. Ici il n'y en a pas : ().
public class Bonjour { public static void bonjour() { System.out.println("Bonjour"); } public static void main(String[] args) { } }
Rien ne s'affiche. En effet, votre fonction principale ne contient rien.
Votre programme contient deux fonctions : la fonction bonjour et la fonction principale (main).
La fonction bonjour est déclarée mais non utilisée.
public class Bonjour { public static void bonjour() { System.out.println("Bonjour"); } public static void main(String[] args) { bonjour(); } }
Le compilateur java (la JVM) démarre à la première instruction de la fonction principale (main) qui est un appel à la fonction bonjour.
Le compilateur poursuit donc vers la première instruction de la fonction bonjour, qui consiste à afficher la chaîne "Bonjour".
Une fois les instructions de la fonction bonjour achevées, le compilateur retourne dans la fonction main pour passer à une possible instruction suivante.
Lorsqu'on veut créer une fonction renvoyant quelque chose, i.e. la fonction retourne une instance/objet que l'on peut mettre dans une variable pour la manipuler, il faut
public class Bonjourbis { public static String bonjour() { return "Bonjour"; } public static void main(String[] args) { String bonjour=bonjour(); System.out.println(bonjour + " M. De Mesmaeker"); } }
Remarquez que dans le programme ci-dessus : "Bonjour" est une chaîne, bonjour est une variable, bonjour() est une fonction.
On peut ajouter des paramètres/arguments à une fonction. Il faut préciser leurs types ou classes, par exemple public static typeRetourné nomFonction(int a, String s) déclare une fonction prenant en paramètres un entier a et une chaîne s.
public class Bonjourter { public static String bonjour(String gentile, String nom) { return "Bonjour "+gentile+" "+nom; } public static void main(String[] args) { String bonjour=bonjour("M.","De Mesmaeker"); System.out.println(bonjour); } }
Remarquez que dans la fonction principale, la variable bonjour n'est pas nécessaire, on a le même résultat avec la fonction principale suivante.
public static void main(String[] args) { System.out.println(bonjour("M.","De Mesmaeker")); }
public class Minimum { public static int minimum2(int a, int b) { // À vous de faire } public static int minimum3(int a, int b, int c) { // À vous de faire // Pas de if ici, utiliser la fonction minimum2 qui renvoie le minimum de deux nombres. } public static void main(String[] args) { System.out.println(minimum2(-2, 1)); System.out.println(minimum3(-2, 1, -4)); } }
-2 -4
public class Repete { public static String repete(int n, String s) { // À vous de faire } public static void main(String[] args) { System.out.println(repete(5,"toto")); } }
public static String repete(int n, String s) { String res=""; // répéter n fois : res reçoit res concaténée avec s concaténée avec "\n" // ou // pour i allant de 1 à n : res reçoit res concaténée avec s concaténée avec "\n" return res; }
public class Mystere { public static int fonction(int a, int b) { a = a + 1; return a+b; } public static void main(String[] args) { int x = 2; int y = 2; System.out.println("Avant la fonction : x="+x+" y="+y); int z = fonction(x,y); System.out.println("Après la fonction : x="+x+" y="+y+" z="+z); } }
Cela veut dire qu'une copie seulement des valeurs de x et y a été passée à la fonction. On parle de passage par valeur. Cela signifie que chaque fonction travaille à partir d'une copie des valeurs passées en argument, chaque fonction dispose de sa propre version des paramètres.
public class Mysterebis { public static void fonction(int a) { a = a + 1; System.out.println("Dans la fonction a="+a); } public static void main(String[] args) { int a = 1; System.out.println("Avant la fonction a="+a); fonction(a); System.out.println("Après la fonction a="+a); } }
public class Mystereter { public static void fonction(String s) { s = s + "1"; System.out.println("Dans la fonction s="+s); } public static void main(String[] args) { String s = "1"; System.out.println("Avant la fonction s="+s); fonction(s); System.out.println("Après la fonction s="+s); } }
Le passage par valeurs est donc aussi valable pour les chaînes.
Le passage par valeurs est la règle générale de Java.
Attention : ce n'est pas vrai pour les tableaux.
import java.util.Arrays; public class Mysterequater { public static void fonction(int[] t) { for (int i = 0; i < t.length; i++) t[i]++; System.out.println("Dans la fonction : t="+Arrays.toString(t)); } public static void main(String[] args) { int[] t = {1,2,3}; System.out.println("Avant la fonction : t="+Arrays.toString(t)); fonction(t); System.out.println("Après la fonction : t="+Arrays.toString(t)); } }
Le tableau reste donc modifié à la sortie de la fonction, c'est ce qu'on attend généralement de l'utilisation des tableaux.
import java.util.Arrays; public class Tableau { public static int[] minmax(int[] t) { // À vous de faire } public static int[] melangealterne(int[] t1,int[] t2) { // Ne fonctionne qu'avec deux tableaux de même taille // À vous de faire } public static void main(String[] args) { int[] t={1,2,3}; System.out.println(Arrays.toString(minmax(t))); System.out.println(Arrays.toString(melangealterne(t,t))); } }
Une pause de 10 mn est possible avant de passer à la deuxième partie une fois tout fini. Si vous avez fini avant les 2h aidez les autres à finir aussi :-)