Comment factoriser ça en une boucle ou deux ?
Fermé
triceraptos
-
8 févr. 2011 à 19:47
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 8 févr. 2011 à 20:57
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 8 févr. 2011 à 20:57
A voir également:
- Comment factoriser ça en une boucle ou deux ?
- Deux ecran pc - Guide
- Comment faire deux colonnes indépendantes dans word - Guide
- Itinéraire google map entre deux adresses - Guide
- Deux comptes whatsapp - Guide
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
3 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
Modifié par Groarh le 8/02/2011 à 20:42
Modifié par Groarh le 8/02/2011 à 20:42
Salut,
voici une première version :
Comme tu le vois j'ai fait une fonction pieces qui regroupe en un seul endroit le code des tes différents switches.
Il y a encore moyen de factoriser ça, et même deux fois, car ton tableau a deux dimensions. On finirait avec deux boucles for imbriquées, ou tout du moins une boucle for et une nouvelle fonction, ce qui n'est pas tellement différent. Attention pour la deuxième, il va y avoir une petite astuce...
Je te laisse chercher ;)
voici une première version :
import java.util.Scanner; public class Lab { private static String pieces(int n) { if (n == 0) { return "Vide"; } else { String s = ""; for (int i = 0; i < n; i++) { s += "O"; }; return s; } } public static void main(String[] args) { int monTableau [][] = { {4,3,2,1}, {4,3,2,1}, {0,0,0,0} }, i = 0, j = 0; // System.out.print(monTableau[i][j]); System.out.print ("Etat du jeu du Joueur\n\n"); System.out.println("1 cent : " + pieces(monTableau[0][0])); System.out.println("5 cents : " + pieces(monTableau[0][1])); System.out.println("10 cents: " + pieces(monTableau[0][2])); System.out.println("25 cents: " + pieces(monTableau[0][3])); System.out.println("\n\nEtat du jeu de l'ordinateur:\n"); System.out.println("1 cent : " + pieces(monTableau[1][0])); System.out.println("5 cents : " + pieces(monTableau[1][1])); System.out.println("10 cents: " + pieces(monTableau[1][2])); System.out.println("25 cents: " + pieces(monTableau[1][3])); System.out.println("\n\nEtat du pot:\n"); System.out.println("1 cent : " + pieces(monTableau[2][0])); System.out.println("5 cents : " + pieces(monTableau[2][1])); System.out.println("10 cents: " + pieces(monTableau[2][2])); System.out.println("25 cents: " + pieces(monTableau[2][3])); System.out.print ("\nFaites votre choix\n" + "------------------\n" + "1: piece de 1 sous\n" + "2 :piece de 5 sous\n" + "3 :piece de 10 sous\n" + "4 :piece de 25 sous"); } }
Comme tu le vois j'ai fait une fonction pieces qui regroupe en un seul endroit le code des tes différents switches.
Il y a encore moyen de factoriser ça, et même deux fois, car ton tableau a deux dimensions. On finirait avec deux boucles for imbriquées, ou tout du moins une boucle for et une nouvelle fonction, ce qui n'est pas tellement différent. Attention pour la deuxième, il va y avoir une petite astuce...
Je te laisse chercher ;)
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
8 févr. 2011 à 20:57
8 févr. 2011 à 20:57
Ok alors version 2, c'est parti :P
Je pourrai pas factoriser plus les System.out.print("Etat du jeu ...") car les trois chaînes sont différentes. Cela dit, tu vois que dans la fonction que j'ai rajouté, j'ai séparé les dimensions du tableau. L'idée c'est que, dans une fonction, on traite les choses localement et on n'a pas besoin de savoir tout ce qui se passe autour.
C'est encore légèrement factorisable, mais il y a un moment où la factorisation n'apporte plus grand chose, et même, peut nuire à la lisibilité du programme. C'est une question de goûts...
import java.util.Scanner; public class Lab { private static String pieces(int n) { if (n == 0) { return "Vide"; } else { String s = ""; for (int i = 0; i < n; i++) { s += "O"; }; return s; } } private static void printEtat(int[] etat) { System.out.println("1 cent : " + pieces(etat[0])); System.out.println("5 cents : " + pieces(etat[1])); System.out.println("10 cents: " + pieces(etat[2])); System.out.println("25 cents: " + pieces(etat[3])); } public static void main(String[] args) { int monTableau [][] = { {4,3,2,1}, {4,3,2,1}, {0,0,0,0} }, i = 0, j = 0; // System.out.print(monTableau[i][j]); System.out.print ("Etat du jeu du Joueur\n\n"); printEtat(monTableau[0]); System.out.println("\n\nEtat du jeu de l'ordinateur:\n"); printEtat(monTableau[1]); System.out.println("\n\nEtat du pot:\n"); printEtat(monTableau[2]); System.out.print ("\nFaites votre choix\n" + "------------------\n" + "1: piece de 1 sous\n" + "2 :piece de 5 sous\n" + "3 :piece de 10 sous\n" + "4 :piece de 25 sous"); } }
Je pourrai pas factoriser plus les System.out.print("Etat du jeu ...") car les trois chaînes sont différentes. Cela dit, tu vois que dans la fonction que j'ai rajouté, j'ai séparé les dimensions du tableau. L'idée c'est que, dans une fonction, on traite les choses localement et on n'a pas besoin de savoir tout ce qui se passe autour.
C'est encore légèrement factorisable, mais il y a un moment où la factorisation n'apporte plus grand chose, et même, peut nuire à la lisibilité du programme. C'est une question de goûts...