IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Méthode qui ne fait rien


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 52
    Points : 34
    Points
    34
    Par défaut Méthode qui ne fait rien
    Bonjour à tous

    Alors voilà, j'ai un petit truc qui me prend la tête depuis ce matin.
    Toujours dans mon projet de fast food, j'ai cette classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    import java.util.ArrayList;
    import java.util.List;
     
    /**
     * Référence et créée de nouveaux produits.
     */
    public final class ProduitsEnVente {
     
        /**
         * Singleton de ProduitsEnVente utilisé pour référencer de manière unique
         * les produits créés par le système.
         */
        private static ProduitsEnVente produits = new ProduitsEnVente();
     
        /**
         * Liste des produits créés par ProduitsEnVente.
         */
        private static List<Produit> products;
     
        /**
         * Constructeur privé qui permet à la classe de ne pas pouvoir être
         * instanciée.
         */
        private ProduitsEnVente() {
            products = new ArrayList<Produit>();
        }
     
        public static ProduitsEnVente getInstance(){
        	if (produits==null){
        		produits=new ProduitsEnVente();
        	}
        	return produits;
        }
     
        /**
         * Crée une liste de nouveaux Produit_simple.
         * @param productName nom des produits à créer
         * @param price prix des produits
         * @param quantité nom de Produit_simple à créer
         */
        public static List<Produit_simple> createProduits(String productName, double price, int quantity) {
            List<Produit_simple> newProducts = new ArrayList<Produit_simple>();
            for (int i = 0; i < quantity; i++) {
                newProducts.add(new Produit_simple(productName, price));
     
            }
            System.out.println(quantity+" "+productName+" sont dorénavant disponibles à la commande");
            produits.products.addAll(newProducts);
            return newProducts;
        }
     
        /**
         * Crée une liste de nouveaux Produit_compose.
         * @param productName nom des produits à créer
         * @param price prix des produits
         * @param quantite quantite du même produit compose à créer
         * @param ingredients liste des ingrédients necessaire à la préparation du produit compose (String)
         * @return liste des nouveaux produits identiquement créés.
         */
        public static List<Produit_compose> CuisinerProduit(String productName, double price, int quantite, List<String> ingredients) {
            List<Produit_compose> newProducts = new ArrayList<Produit_compose>();
            List<Ingredient> ingred = new ArrayList<Ingredient>();
     
           for (int i=1 ; i==quantite ; i++){
        	   ingred.clear();
                 int l;
            	 for (int j=ingredients.size()-1 ; j>0; j--){
            		 l=0;
            		String nom_ingred = ingredients.get(j);
            		 for (int k = Ingredients.getStockIngredients().size()-1 ; k>0 ; k--){
            			 if (nom_ingred.equals(Ingredients.getStockIngredients().get(k).getNom_ingredient()) && l<1 ){
            				 Ingredients.getInstance();
    						ingred.add(Ingredients.getStockIngredients().get(k));
            				 Ingredients.getStockIngredients().remove(k);
            		      	 l++;
            			 }
            		 }
                }
            	 if (ingredients.size()==ingred.size()){
            		 newProducts.add(new Produit_compose(productName, price, ingred));
            	 }
            	 else {
            		 System.out.println("Il n'y a pas assez d'ingrédients pour préparer le produit");
            		 }
           }
     
            ProduitsEnVente.products.addAll(newProducts);
            return newProducts;
        }
     
        public static List<Produit> getProducts(){
        	return products;
     
        }
     
        public static void DecrisStock(){
        	String compo = "Le stock de produits est : ";
     
        	for (Produit prod : products){
        		compo = compo +" "+ prod.getNom_produit();
        	}
        	System.out.println(compo);
     
        }
     
    }

    Mon problème vient de la méthode CuisinerProduit(). En effet, aucun produit_compose n'est crée quelque soit la quantité demandée malgré le fait que la quantité d'ingrédients soit suffisante.

    Illustration:
    Je crée mon stock d'ingrédients:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // On crée une liste composée de 4 tomates 
            List<Ingredient> tomates = Ingredients.createIngredients("tomate", 0.5, 4);
            // Description d'une tomate
            System.out.println(tomates.get(0).DecrisIngredient());
            // On rajoute 4 tomates 
            tomates.addAll(Ingredients.createIngredients("tomate", 0.5, 4));
            // On ajoute 4 steacks
            List<Ingredient> steacks = Ingredients.createIngredients("steack", 2, 2);
            System.out.println(steacks.get(0).DecrisIngredient());
            List<Ingredient> cornichons = Ingredients.createIngredients("cornichon", 0.2, 6);
            Ingredients.DecrisStock();

    J'obtiens bien ce que je veux à savoir:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    4 tomate ont été ajoutés au stock
    L'ingrédient tomate est au prix unitaire de 0.5 €
    4 tomate ont été ajoutés au stock
    2 steack ont été ajoutés au stock
    L'ingrédient steack est au prix unitaire de 2.06 cornichon ont été ajoutés au stock
    Le stock d'ingrédients se composent de:
    -tomate
    -tomate
    -tomate
    -tomate
    -tomate
    -tomate
    -tomate
    -tomate
    -steack
    -steack
    -cornichon
    -cornichon
    -cornichon
    -cornichon
    -cornichon
    -cornichon

    Ensuite je veux créer 1 Big Mac qui se composent de 2 tomate + 1 steack + 2 cornichon (l'absence de "s" est volontaire ^^). Pour cela j'utilise la méthode CuisinerProduits():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    // Les ingrédients nécessaires à la composition d'un Big Mac
    List<String> ingredients = new ArrayList<String>();
            ingredients.add("tomate");
            ingredients.add("tomate");
            ingredients.add("steack");
            ingredients.add("cornichon");
            ingredients.add("cornichon");
     
    // On tente de créer 1 seul Big Mac:
     List<Produit_compose> BigMacs = ProduitsEnVente.CuisinerProduits("Big Mac", 4.5, 3, ingredients);
            // On vérifie si les ingrédients ont disparu  du stock d'ingrédients et si le produit a été crée
            Ingredients.DecrisStock();
            ProduitsEnVente.getInstance();
            ProduitsEnVente.DecrisStock();

    Et le résultat:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Le stock d'ingrédients se composent de:
    -tomate
    -tomate
    -tomate
    -tomate
    -tomate
    -tomate
    -tomate
    -tomate
    -steack
    -steack
    -cornichon
    -cornichon
    -cornichon
    -cornichon
    -cornichon
    -cornichon
    Le stock de produits est :
    En gros ma méthode ne fait rien du tout, les ingrédients ne sont pas supprimés du stock d'ingrédients et les produits ne sont pas crées. Le programme renvoie même pas d'erreur! Si quelqu'un voit ce qui cloche...
    Merci

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 52
    Points : 34
    Points
    34
    Par défaut
    Autrement auriez-vous une méthode similaire (plus simple ou pas) qui permettrait de créer n nouveaux produits en s'assurant avant chaque création que la quantité d'ingrédients en stock est suffisante?

  3. #3
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Tu devrai créer une méthode : "createProduit"
    Qui ne crée qu'un seul produit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static List<Produit_simple> createProduits(String productName, double price, int quantity) {
    		List<Produit_compose> newProducts = new ArrayList<Produit_compose>();
    		for (int i=1 ; i==quantite ; i++){
    			try{
    				newProducts.add(createProduit(String productName, double price));
    			}catch(Exception e){
    				System.out.println("Il n'y a pas assez d'ingrédients pour préparer le produit");
    				break;
    			}
            ProduitsEnVente.products.addAll(newProducts);
            return newProducts;
    }
    En supposant que la signature de la méthode soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static List<Produit_simple> createProduit(String productName, double price) throw Exception;
    à la place de ton l++ fait un break. Cela finit la boucle for/while/do la plus proche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (int j=ingredients.size()-1 ; j>0; j--){
    	String nom_ingred = ingredients.get(j);
    	for (int k = Ingredients.getStockIngredients().size()-1 ; k>0 ; k--){
    		if (nom_ingred.equals(Ingredients.getStockIngredients().get(k).getNom_ingredient())){
    			Ingredients.getInstance();
    			ingred.add(Ingredients.getStockIngredients().get(k));
    			Ingredients.getStockIngredients().remove(k);
    			break;
    		}
    	}
    }
    Tu as aussi le for each en java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(String name : listOfName){
     
    }
    Pour finir tente de vois l’exécution de ta fonction. Débogueur ou affichage de ta liste par exemple.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  4. #4
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    essaye d'éliminer la plupart de tes méthodes statiques la conception d'ensemble y gagnerait beaucoup.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

Discussions similaires

  1. TRIGGER qui ne fait rien ?
    Par innova dans le forum Développement
    Réponses: 3
    Dernier message: 20/11/2006, 14h39
  2. Réponses: 10
    Dernier message: 16/11/2006, 21h36
  3. [PHP-JS] Méthode flush() qui ne fait rien
    Par Khrysby dans le forum Langage
    Réponses: 9
    Dernier message: 21/05/2006, 19h55
  4. [debutant]programme qui ne fait rien.
    Par Battosaiii dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 04/12/2005, 22h19
  5. procédure stockée qui ne fait rien
    Par trotters213 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo