
|
|
|
|
Les structures de contrôle de javaIci nous allons voir donc comment créer des alternatives et des boucles en java. C'est similaire au C.
Sommaire du chapitre :
![]() Les alternatives en javaPartie I (suite)Alternatives et conditionsUne alternative est en fait un test dans un programme qui peut être soit vérifié ou non Les programmes procéduraux à la base se déroulaient en suivant les instructions depuis le début du programme jusqu'à la fin (de haut en bas sans arrêts), mais on a ensuite élaboré des structures afin que certaines instructions soit exécutées ou non en fonction sur base d'un test. Si le test est vérifié, on exécute une série d'instructions sinon on exécute une autre série d'instructions Une alternative se fait sur base d'une condition. Oui, mais comment établir une condition en java ? D'abord sachez qu'il y a deux sortes de conditions, les conditions simples, et les conditions multiples. La condition simple :C'est en fait une bête comparaison entre deux (ou plusieurs) variables ou une (ou des) variable(s) et une (ou des) valeur(s). Une condition s'exprime de manière générale : nomVar1 opérateur_logique nomVar2; Exemple : var1 < var2. (On effectue ce que l'on appelle un prédicat, un test. Les opérateurs logiques en Java sont : "==" pour l'égalité. (le double égal) Attention, un seul égal = l'affectation, et donc erreur en compilation! Mettez donc 2 égales "==" pour la comparaison entre 2 variables On peut aussi bien sur comparer une variable avec une valeur var1 == 1 Les autres opérateurs de comparaisons : < pour plus petit que. > pour plus grand que. <= pour plus petit ou égal >= pour plus grand ou égal != pour différent de Un test ne renverra toujours que deux valeurs, soit vrai ou faux Les variables booléennes.Elle peuvent contenir soit vrai, ou faux. (ce qui correspond à 0 ou autre valeur en C) On les utilise pour pas confondre les variables de type entier qui servent à faire des tests et les autres. Car en c, si toute valeur est différente de 0, la condition est vraie. (Et c'est comme ça que s'utilisent les variables booléennes en C.) En c++ il y a ces fameuses variables booléennes. Exemple de programme : Code : Java class Exemple3 { Pour simplifier if (existe == false) on écrit un point d'exclamation devant le nom de la variable booléenne tout simplement. Syntaxe : if (!existe) { .... Éviter les tests inutiles du style Code : Java if (existe) { Si il a plus de 50 ans, il n'est pas nécessaire de vérifier s'il en a moins de 20 car s'il en a plus que 50 ans, il en a forcément pas moins que 20! En java, on a donc également simplifier la tâche avec les booléens, pour ne pas confondre avec les int. Affectation d'un booléen : varBool = true ou varBool = false. (2 valeurs possibles seulement) Comme java est un langage compacte, il suffira d'indiquer tout simplement le nom de la variable booléenne dans le if La structure if Justement, parlons du if maintenant. Sa structure est pareille qu'en C comme dans le cours de David. (erf il l'a effacé;, pas grave je vous la remet) ^^ La syntaxe Code : Java if (condition) { Votre condition se mettra donc entre les parenthèses après un if. Si la condition est vraie, les instructions dans le bloc if sont exécutées et si la condition est fausse, les instructions dans le bloc else sont exécutées On peut aussi écrire : Code : Java if (condition) { C'est le "else if"; Evitez d'écrire : Code : Java if(condition1) { Car c'est moins claire. Il vaut mieux employer le else if. Le else est facultatif car, on pourrait très bien ne rien faire si la condition est fausse. Les conditions multiples (utilisation d'opérateurs booléens) :C'est un ensemble de plusieurs conditions simples reliées entre elles à l'aide d'opérateurs logiques. L'ensemble est appelé une expression booléenne et une expression booléenne peut avoir une ou plusieurs conditions. (mais n'en faîtes pas trop, votre code doit rester claire) Il existe plusieurs sorte de liaisons Le et qui se note && Le ou inclusif qui se note || Le non qui se note ! Le et : sert a comparer plusieurs conditions et il renvoie vrai si toutes les conditions sont vraies NB : En java, si la première condition est fausse, la seconde ne sera même pas vérifiée, il renvoie faux d'office. C'est ce qui s'appelle des opérateurs logiques à cours circuit. Un seul & provoque la vérification de toutes les conditions de l'expression même si la première condition est fausse ce qui est inutile. Le ou inclusif : renvoie faux uniquement lorsque toutes les conditions sont fausse. Sinon si l'une d'elle ou même toutes à la fois sont vraies, il renvoie vrai. Le ou exclusif : Il n'existe pas pour les variables de type booléennes, juste pour la comparaison de nombres bit à bit, il se note. ^ Le non : renvoie vrai lorsqu'une expression booléennes est fausse. Comme je vous l'ai montré avec la variable booléenne "existe" ci dessus. (on rajoute le ! devant qui équivaut à existe = false Les tables de véritésElles permettent de déterminer quelle valeur va nous renvoyer une expression booléenne. (Selon que les conditions dans les expressions booléennes soient vrai ou fausse. Je vais vous mettre les 4 tables de vérités de base (avec donc deux test seulement) : Tables de vérité du et, du ou, du ou exclusif et du non. (avec un seul test pour le non) ![]() Ou T1 représente le premier test, t2 le second test et r le résultat de l'expression booléenne. v = vrai et f = faux. Exemple avec ces quatre liaisons là Code : Java if (age > 0) Remarque : j'ai fait exprès de faire ça pour bien que vous compreniez, j'aurais bien sur sinon du le faire avec des conditions plus simples. Mais parfois les conditions multiples sont utiles; et évitent de faire trop de test, d'utiliser trop de if et on ne s'y retrouve plus après. Notamment lorsque vous devrez gérer des gestions de collision ou il y aura plein de tests à faire pour pas foncer dans les murs =D Voilà maintenant je crois que vous savez tout sur les conditions. ^ NB : comme pour les opérateurs mathématiques, il existe un raccourci assez pratique. Syntaxe : condition ? si vrai : si faux Attention, l'opérateur ternaire doit être mit entre () pour que ça compile. Exemple : On veut créer un programme qui fait deviner un nombre à l'utilisateur et ce nombre est compris entre un et dix. La classe Math permet de faire tirer un nombre au hasard à l'utilisateur : Code : Java import java.util.Scanner; Ca simplifie le code tout simplement, plutôt que de devoir écrire : Code : Java if (iProposition < iNbGenere) Remarque : s'il n'y a qu'une seule instruction après le if ou le else, on n'est pas obligé de mettre des crochets, mais sinon obligation d'en mettre!!! Si vous voulez comparer par exemple des chaînes de caractères, le == ne marchera pas et les autres opérateurs (<, <=, >=, >) ne marcheront pas non plus! Utiliser la méthode equals de la classe String pour comparer deux chaînes de caractères entre elles : Exemple : Code : Java if (chaine1.equals(chaine2)) { Une instruction bien particulière, le switchUtilité du switchLe "switch" permet de faire un choix pour les instruction(s) à exécuter en fonction des valeurs possibles que peut prendre une variable. On le note comme en C : switch (variable) { ... } Cette variable ne peut être que de type byte, short, int, long ou char et pas autre chose! (char est aussi un nombre, je vous le montrerai plus tard ^^) Des exemples pour bien comprendreExemple de programme avec le switch : Code : Java int menu; On constate que si vous taper 1; il affiche aussi les 3 phrases suivantes. Pour éviter cela, il faut lui dire de sortir du switch après l'instruction, en rajoutant un break. Code : Java int menu; Le "default" sert lorsque la valeur de la variable ne correspond à aucune valeur de case. En effet si vous taper 5, il y a rien. Pourquoi un break ? Parce qu'on pourrait très bien vouloir faire les instructions suivantes. Par exemple si l'entrée est d'office accompagnée du reste. Ça c'est à vous de voir lorsque vous programmer quels instructions il faut exécuter en fonction des différents cas possibles que pourra prendre votre variable. Je sais que c'est pas toujours évidement d'analyser, des fois moi aussi j'ai des problèmes et je passe une heure devant l'écran avant de comprendre pourquoi ça ne marche pas, mais le temps est votre ami. Les structure répétitives en javaIl en existe 3 en java. Elles sont utilisées en fonction de ce qu'on doit appliquer comme traitement. Elle permettent de répéter plusieurs fois les mêmes instructions. La structure pour Elle est composée d'une variable de type entière, qui aura une valeur initiale, une valeur finale, et une valeur d'incrémentation. Elle est a privilégiée lorsqu'on connait le nombre de répétitions à effectuer. Toutes les instructions se trouvant dans le bloc d'instructions du for seront répétées. (pratique non?) Exemple : programme qui compte par deux jusqu'à 100. Code : Java for (int i = 0; i <= 100; i += 2) { Attention, on ne peut pas modifier la variable i dans la structure pour. Ne pas décrémenter i sinon i va se diriger dans les nombres négatis : -2, -4, et ne sera jamais égal à 100, dans ce cas votre programme va tourner à l'infini sans s'arrêter! Il faut alors fermer et relancer blue-j ce qui est bien embêtant. On peut aussi incrémenter plusieurs variables à la fois dans un for comme ceci : Code : Java for (int i = 0; j = 1; i <= 100; i += 2; j += 3) { } La structure tant que.Utilisée lorsqu'il peut y avoir aucune, 1 ou n répétitions des instructions qui se trouvent à l'intérieur du bloc. Elle est utilisée lorsque le nombre de répétitions nous est inconnu. Exemple : Compter par 3 jusqu'à ce que l'utilisateur souhaite que l'on arrête. Code : System.out.println("Continuer ? (Tapez 'o' pour oui et autre chose pour non)"); Scanner lectureClavier = new Scanner (system.in); char rep = lectureClavier.next ().charAt(0); int compteur = 0; while (rep == 'o') { compteur = compteur + 3; System.out.println(compteur); System.out.println("Continuer ? (Tapez o pour oui et autre chose pour non)"); rep = lectureClavier.next().charAt(0); } La structure fait tant que.Utilisée lorsqu'il y a au minimum une répétition à faire. Exemple : reprenons le programme du dessus, mais on veut qu'il affiche d'office trois sans demander l'avis à l'utilisateur. Code : Java Scanner lectureClavier = new Scanner (system.in); Ne pas oublier le ";" après la ")" de fin de la condition dans le while. Les conditions sont donc soit utilisées dans une boucle, ou alors dans une alternative, mais pas ailleurs! Et oui, elles ne vous lâcherons plus ces conditions, c'est donc important de pouvoir bien les maîtriser. Comme pour les alternatives, on peut se passer des crochets s'il n'y a qu'une seule instruction dans la boucle. Attention de ne pas les oublier si vous en avez plusieurs!! Sinon, seule la première instruction sera répétée! Les boucles infinies A n'utiliser que en cas de besoin! Aller je vous les donnes quand même mais attention à n'utiliser qu'en cas de besoin sinon votre programme ne s'arrêtera jamais et plantera. Pour le for : Code : Java for ( ; ; ) {} //On écrit rien à l'intérieur à part les points virgules. Pour le while et le do while : Code : Java while (true) {} On utilise donc nos valeurs spéciales de nos variables booléennes dont je vous ai plus haut si vous vous en souvenez bien, sinon aller revoir. Si vous avez bien compris, si on met while (false) {} ce qui se trouve dans la boucle ne sera jamais exécuté. Le break et le continueCe sont deux instructions particulières que l'on rencontre dans une boucle. L'une permet d'en sortir, l'autre permet d'ignorer certaines instructions dans une boucle. Le "break" : permet de sortir d'une boucle!Exemple : on veut un programme qui compte jusqu'à 10 mais qui s'arrête quand l'utilisateur tape non. (je sais je lai déjà fait avec un while, mais maintenant je vais le faire avec un for pour que vous compreniez bien son principe même si il y'a mieux. Code : Java import java.util.Scanner; Le "continue".Supposons maintenant que l'on veut un programme qui compte jusqu'à dix, mais on ne veut pas qu'il affiche 8. Exemple : Code : Java for (int i = 0; i <= 10; i++) { Lorsque i vaut 8, l'instruction continue va renvoyer le programme au for de la boucle et va incrémenter i de 1, sans afficher 8. L'instruction d'affichage est ignorée lorsque i vaut 8. break et continue peuvent aussi s'utiliser dans un while et un do while. Mais attention, avec l'instruction continue : Code : Java int i=0; Attention de bien incrémenter la variable i avant le if, sinon, le continue va sans cesse renvoyer le programme au début du while, en ignorant l'instruction d'incrémentation, le "i++", quand i vaudra 8, votre programme va donc planter!! Exercices (Les alternatives)Pour générer un nombre aléatoire utiliser la méthode random () de la classe Math Math.random () => Génère un nombre aléatoire de type double et supérieur ou égale à 0.0 et inférieur à 1.0. 2)Ecriver un programme capable de générer un entier aléatoire et d'indiquer s'il est divisible par 2, par 3 ou 5. Truc : utiliser le reste de la division (opérateur modulo) lors du test. 3)Ecriver un programme capable de générer 4 entiers compris entre 0 et 999 inclus et d'écrire le minimum et le maximum. 4)Ecriver et exécuter un programme capable de faire deviner à l'utilisateur un nombre généré aléatoirement par la machine, et d'indiquer à chaque tentatives si ce nombre est trop petit ou trop grand. (max 5 tentatives) 5)Ecriver et exécuter un programme capable de simuler une machine à calculer dont les opérations sont l'addition, la soustraction, la multiplication et la division. Vous dever utiliser la structure switch pour évaluer l'opérateur encodé par l'utilisateur (+, -, *, /). Pour récupérer le caractère de l'opérateur, utiliser les instructions suivantes : Code : Java Une division par zéro est une opération non conforme! Solution des exercices (les alternatives)1) Code : Java class exo1 { 2) Code : Java class exo2 { 3) Code : Java class exo 3 { Remarque : il y a moyen de faire plus simple mais je vous force d'utiliser ça afin de bien maitriser les if et les opérations booléennes car elle seront importantes et nombreuse lors de la création de vos jeux. 4) Code : Java import java.util.Scanner Même remarque que l'exo précédant 5) Code : Java import java.util.Scanner Si vous avez du mal à comprendre, relisez le cours, regarder bien la solution et essayez de comprendre puis essayer de refaire l'exercice tout seul. Si vous ne comprenez toujours pas, posez moi des questions sur le forum. Exercices (Les répétitives)1) Ecrivez et exécuter un programme capable de générer 5 nombres entiers aléatoire et d'afficher leur moyenne. 2) Ecrivez et exécuter un programme capable de rechercher huit triplet de Pythagore. Equation : a² + b² = c². a, b et c seront générer aléatoirement et sont comprit entre 1 et 100. Utiliser l'instruction continue lorsque l'équation est fausse. 3) Modifier le programme de l'exercice 5 sur les alternatives : cette fois-ci l'utilisateur à droit à autant de tentatives qu'il le souhaite. Indiquer combien de tentatives il lui a fallut pour trouver le nombre. Si vous voulez aller encore plus loin, associer un score en fonction du nombre de tentatives qu'il a dû effectué avant de trouver le bon nombre. Solution des exercices. (Les répétitives)1) Code : Java import java.util.Scanner; class exerc1 { public static void main (String [] args) { int nombre, moyenne = 0; for (int i = 0; i < 5, i++) { nombre = (int) (Math.random () * 100); moyenne = moyenne + nombre; } moyenne = moyenne / 5; System.out.println("Moyenne = "+moyenne); } } 2) Code : Java public class exerc2 { public static void main (String[] args) { int a, b, c, nbTouves = 0; do { a = (int) (Math.random () * 100 + 1); b = (int) (Math.random () * 100 + 1); c = (int) (Math.random () * 100 + 1); int hypothenuse = c * c; int sommeCotes = a * a + b * b; if (hypothenuse != sommeCotes) { continue; nbTrouve++; System.out.println("Triplet trouvé n° "+nbTrouve+" : "); System.out.println("a = "+a+"\nb = "+b+"\nc = "+c); } while (nbTrouve < 8); } } 3) Code : Java import java.util.Scanner; public class exerc3 { public static void main (String args[]) { Scanner lectureClavier = new Scanner (System.in); int nbAlea, nbPropose, nbTentatives = 1, score; nbAlea = (int) (Math.random () * 100); System.out.println("L'ordinateur à généré un nombre entre 0 et 100..."); do { System.out.println("Devinez le en entrant une proposition : "); nbpropose = lectureClavier.nextInt(); if (nbPropose != nbAlea) { System.out.println("Manqué, le nombre est trop : " + (nbPropose < nbAlea ? "petit." : "grand.")); nbTentatives++; } while (nbPropose != nbAlea); System.out.println("Vous avez trouvé le nombre au bout de "+nbTentatives+"."); if (nbTentatives == 1) score = 100; else if (nbTentatives <= 5) score = 80; else if (nbTentatives <= 10) score = 60; else if nbTentatives <= 15) score = 40; else if (nbTentatives < 20) score = 20; else score = 0; System.out.println("Votre score est de : "+score); } } On a donc un type de variable booléen pour simplifier l'écriture d'une condition. Il y a 2 structures alternatives, le if {} else {} et le switch (variable) { case 1: ... break; }. Et une structure particulière pour simplifier : condition ? si vrai : si faux; Il y a 3 types de boucles(for, while et do{...} while ) 2 instructions particulières : break, et continue pour sortir d'une boucle, ou alors ignorer des instructions dans celle-ci. A vous de voir quelle structure il convient le mieux d'employer. ![]() Rédigé par Lo
|
||
|
Hébergeur du site : 1and1.fr Site de création de Jeux Vidéo Apprenez à créer vos propres Jeux Video A propos de la construction du site... |
515124 pages ont été consultées sur le site ! Dont 307 pages pendant les 24 dernières heures. Page générée en 1.08 secondes Nos partenaires - Otium Production : Aide aux débutants à créer leurs jeux - Site de dessins d'enfants |