Algorithme "Appels de méthodes"
Fermé
Jiko-java
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017
-
13 févr. 2017 à 18:26
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 16 févr. 2017 à 07:02
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 16 févr. 2017 à 07:02
A voir également:
- Algorithme "Appels de méthodes"
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Appels masqués - Guide
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Algorithme euromillion excel gratuit - Forum Logiciels
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
1 réponse
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
13 févr. 2017 à 20:19
13 févr. 2017 à 20:19
Bonjour,
Pour que ton code soit plus lisible il faut sortir toutes les "valeurs magiques" qui sont liées à tes niveaux (5, 10, 11, 19, +2, +1, -2...)
Je pense que la bonne idée est d'utiliser un enum où chaque valeur représente un niveau. Pour l'instant il n'y a que FACILE et DIFFICILE, mais si tu veux rajouter 1, 2 ou 15 niveaux intermédiaires avec ton code c'est impossible alors qu'avec un enum il suffirait de rajouter une valeur.
Je t'invites à ajouter des niveaux intermédiaires, avec par exemple :
Pour que ton code soit plus lisible il faut sortir toutes les "valeurs magiques" qui sont liées à tes niveaux (5, 10, 11, 19, +2, +1, -2...)
Je pense que la bonne idée est d'utiliser un enum où chaque valeur représente un niveau. Pour l'instant il n'y a que FACILE et DIFFICILE, mais si tu veux rajouter 1, 2 ou 15 niveaux intermédiaires avec ton code c'est impossible alors qu'avec un enum il suffirait de rajouter une valeur.
import java.util.Random; import java.util.Scanner; public class MultiDificil { private static final Random random = new Random(); private static final Scanner scanner = new Scanner(System.in); public static int unEntierAuHasardEntre(int valeurMinimale, int valeurMaximale) { return random.nextInt(valeurMaximale - valeurMinimale + 1) + valeurMinimale; } public enum Niveau { FACILE(1, 6, 3, 10, 1, 2), DIFFICILE(5, 10, 11, 19, 2, 2); private final int minA, maxA, minB, maxB, scoreOk, scoreKo; Niveau(int minA, int maxA, int minB, int maxB, int scoreOk, int scoreKo) { this.minA = minA; this.maxA = maxA; this.minB = minB; this.maxB = maxB; this.scoreOk = scoreOk; this.scoreKo = scoreKo; } public int getPremierNombreAuHasard() { return unEntierAuHasardEntre(minA, maxA); } public int getSecondNombreAuHasard() { return unEntierAuHasardEntre(minB, maxB); } public int getNbPointsSucces() { return scoreOk; } public int getNbPointsEchec() { return scoreKo; } public Niveau suivant(int delta) { int pos = ordinal() + delta; if (pos < 0) { pos = 0; } else { int len = Niveau.values().length; if (pos >= len) pos = len - 1; } return Niveau.values()[pos]; } } public static int saisirResultat(Niveau niveau, int premierNombre, int secondNombre) { System.out.println("MULTIPLICATION " + niveau); System.out.print(premierNombre + " x " + secondNombre + " = "); return scanner.nextInt(); } public static void afficherScore(boolean succes, int reponse, int point, int score) { if (succes) { System.out.print("Très bien. Vous gagnez "); } else { System.out.print("Non, c'était " + reponse + ". Vous perdez "); } System.out.println(point + " points. Votre score est de " + score + "."); } public static void main(String[] args) { Niveau niveau = Niveau.DIFFICILE; int score = 0; for (int i = 1; i <= 10; i++) { int premierNombre = niveau.getPremierNombreAuHasard(); int secondNombre = niveau.getSecondNombreAuHasard(); int reponseEleve = saisirResultat(niveau, premierNombre, secondNombre); int reponseCorrecte = premierNombre * secondNombre; boolean succes = reponseEleve == reponseCorrecte; int point; if (succes) { point = niveau.getNbPointsSucces(); score += point; niveau = niveau.suivant(+1); } else { point = niveau.getNbPointsEchec(); score -= point; niveau = niveau.suivant(-1); } afficherScore(succes, reponseCorrecte, point, score); } } }
Je t'invites à ajouter des niveaux intermédiaires, avec par exemple :
public enum Niveau { FACILE(1, 6, 3, 10, 1, 2), NORMALE(3, 5, 2, 8, 1, 2), DIFFICILE(5, 10, 11, 19, 2, 2);
14 févr. 2017 à 02:41
je veut dire puisque on sait que l'utilisateur commencera un exercice "Difficile" dans le cas où il échoue pourquoi ne pas Mettre Niveau.DIFFICLE à Niveau.FACILE , En gros Changer La valeur de L'objet Niveau ?
14 févr. 2017 à 19:38
Niveau n'est pas un objet, mais une classe, qui étends java.lang.Enum
FACILE, NORMAL et DIFFICILE sont des objets de la classe Niveau, et particularité de l'enum, ce sont les seuls objets qui puisse exister.
"dans le cas où il échoue pourquoi ne pas Mettre Niveau.DIFFICLE à Niveau.FACILE"
Ça fonctionnerait si on se limitait à FACILE et DIFFICILE, mais avec NORMAL entre les deux ça ne fonctionne plus.
Lorsque l'on déclare un enum, l'ordre a un sens. La méthode Niveau.values() renvoie un tableau Niveau[] avec chaque niveau dans l'ordre où il a été déclaré.
C'est à dire que Niveau.values() vaut { FACILE, NORMAL, DIFFICILE };
On a donc FACILE.ordinal() == 0, NORMAL.ordinal() == 1, DIFFICILE.ordinal() == 2.
La méthode suivant(delta) permet de passer d'un niveau à un autre (avec +1 ou -1) de sorte que NORMAL.suivant(+1) == DIFFICILE et NORMAL.suivant(-1) == FACILE.
Ce qui marche aussi quand tu n'as que FACILE et DIFFICILE.
Si on détaille :
Dans les cas particuliers on gère les cas FACILE.suivant(-1) == FACILE et DIFFICILE.suivant(+1) == DIFFICILE, sinon on dépasserait la taille du tableau.
16 févr. 2017 à 06:00
Est ce que La Classe enum posède dejà un tableaux ou quelque chose de ce genre ?
16 févr. 2017 à 07:02