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
Bonjour, Voilà un code que j'ai crée, je veux le factoriser en une boucle ou plusieurs mais je ne sais pas comment, pourriez vous m'aider ?
import java.util.Scanner; 

public class lab {

	/**
	 * @param args
	 */
	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" );
		    	
		    switch (monTableau[0][0])
		    {
		    case (4): 	    System.out.print ("1 cent  : OOOO\n");
		    break;
		    case (3): 	    System.out.print ("1 cent : OOO\n");
		    break;
		    case (2): 	    System.out.print ("1 cent : OO\n");
		    break;
		    case (1): 	    System.out.print ("1 cent : O\n");
		    break;
		    case (0): 	    System.out.print ("1 cent : Vide\n");
		    break;
		    
		    }
		    switch (monTableau[0][1])
		    {
		    case (4): 	    System.out.print ("5 cents : OOOO\n");
		    break;
		    case (3): 	    System.out.print ("5 cents : OOO\n");
		    break;
		    case (2): 	    System.out.print ("5 cents : OO\n");
		    break;
		    case (1): 	    System.out.print ("5 cents : O\n");
		    break;
		    case (0): 	    System.out.print ("5 cents : Vide\n");
		    break;
		    
		    }
		    switch (monTableau[0][2])
		    {
		    case (4): 	    System.out.print ("10 cents: OOOO\n");
		    break;
		    case (3): 	    System.out.print ("10 cents: OOO\n");
		    break;
		    case (2): 	    System.out.print ("10 cents: OO\n");
		    break;
		    case (1): 	    System.out.print ("10 cents: O\n");
		    break;
		    case (0): 	    System.out.print ("10 cents: Vide\n");
		    break;
		    
		    }
		    switch (monTableau[0][3])
		    {
		    case (4): 	    System.out.print ("25 cents: OOOO\n");
		    break;
		    case (3): 	    System.out.print ("25 cents: OOO\n");
		    break;
		    case (2): 	    System.out.print ("25 cents: OO\n");
		    break;
		    case (1): 	    System.out.print ("25 cents: O\n");
		    break;
		    case (0): 	    System.out.print ("25 cents: Vide\n");
		    break;
		    
		    }
		  
		  System.out.println("\n\nEtat du jeu de l'ordinateur:\n");     
		
		   
		  switch (monTableau[1][0])
		    {
		    case (4): 	    System.out.print ("1 cent  : OOOO\n");
		    break;
		    case (3): 	    System.out.print ("1 cent : OOO\n");
		    break;
		    case (2): 	    System.out.print ("1 cent : OO\n");
		    break;
		    case (1): 	    System.out.print ("1 cent : O\n");
		    break;
		    case (0): 	    System.out.print ("1 cent : Vide\n");
		    break;
		    
		    }
		    switch (monTableau[1][1])
		    {
		    case (4): 	    System.out.print ("5 cents : OOOO\n");
		    break;
		    case (3): 	    System.out.print ("5 cents : OOO\n");
		    break;
		    case (2): 	    System.out.print ("5 cents : OO\n");
		    break;
		    case (1): 	    System.out.print ("5 cents : O\n");
		    break;
		    case (0): 	    System.out.print ("5 cents : Vide\n");
		    break;
		    
		    }
		    switch (monTableau[1][2])
		    {
		    case (4): 	    System.out.print ("10 cents: OOOO\n");
		    break;
		    case (3): 	    System.out.print ("10 cents: OOO\n");
		    break;
		    case (2): 	    System.out.print ("10 cents: OO\n");
		    break;
		    case (1): 	    System.out.print ("10 cents: O\n");
		    break;
		    case (0): 	    System.out.print ("10 cents: Vide\n");
		    break;
		    
		    }
		    switch (monTableau[1][3])
		    {
		    case (4): 	    System.out.print ("25 cents: OOOO\n");
		    break;
		    case (3): 	    System.out.print ("25 cents: OOO\n");
		    break;
		    case (2): 	    System.out.print ("25 cents: OO\n");
		    break;
		    case (1): 	    System.out.print ("25 cents: O\n");
		    break;
		    case (0): 	    System.out.print ("25 cents: Vide\n");
		    break;
		    
		    }
		
		    System.out.println("\n\nEtat du pot:\n");     
			
			   
			  switch (monTableau[2][0])
			    {
			    case (4): 	    System.out.print ("1 cent  : OOOO\n");
			    break;
			    case (3): 	    System.out.print ("1 cent : OOO\n");
			    break;
			    case (2): 	    System.out.print ("1 cent : OO\n");
			    break;
			    case (1): 	    System.out.print ("1 cent : O\n");
			    break;
			    case (0): 	    System.out.print ("1 cent : Vide\n");
			    break;
			    
			    }
			    switch (monTableau[2][1])
			    {
			    case (4): 	    System.out.print ("5 cents : OOOO\n");
			    break;
			    case (3): 	    System.out.print ("5 cents : OOO\n");
			    break;
			    case (2): 	    System.out.print ("5 cents : OO\n");
			    break;
			    case (1): 	    System.out.print ("5 cents : O\n");
			    break;
			    case (0): 	    System.out.print ("5 cents : Vide\n");
			    break;
			    
			    }
			    switch (monTableau[2][2])
			    {
			    case (4): 	    System.out.print ("10 cents: OOOO\n");
			    break;
			    case (3): 	    System.out.print ("10 cents: OOO\n");
			    break;
			    case (2): 	    System.out.print ("10 cents: OO\n");
			    break;
			    case (1): 	    System.out.print ("10 cents: O\n");
			    break;
			    case (0): 	    System.out.print ("10 cents: Vide\n");
			    break;
			    
			    }
			    switch (monTableau[2][3])
			    {
			    case (4): 	    System.out.print ("25 cents: OOOO\n");
			    break;
			    case (3): 	    System.out.print ("25 cents: OOO\n");
			    break;
			    case (2): 	    System.out.print ("25 cents: OO\n");
			    break;
			    case (1): 	    System.out.print ("25 cents: O\n");
			    break;
			    case (0): 	    System.out.print ("25 cents: Vide\n");
			    break;
			    
			    }
			    System.out.print ("\nFaites votre choix\n------------------\n1: piece de 1  sous\n2 :piece de 5  sous\n3 :piece de 10 sous\n4 :piece de 25 sous");
			
	}

}






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
Salut,

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 ;)
0
Steuplé man :D
0
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
Ok alors version 2, c'est parti :P
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...
0