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 :

Copier un objet vers une autre liste et le supprimer de la première


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 Copier un objet vers une autre liste et le supprimer de la première
    Bonjour à tous!

    Alors voilà j'ai un petit problème

    J'ai la classe suivante:
    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
     import java.util.ArrayList;
    import java.util.List;
    public class Commande {
     
    	private List<Produit> produits_commandes;
     
    	public Commande() {
    		produits_commandes = new ArrayList<Produit>();
    	}
    	public void CommanderProduits(String nom_client, List<String> produits) {
    			for (String prod : produits){
    			int i;
    			i=0;
    			 for (int j=ProduitsEnVente.getProducts().size()-1;i>0;j--){
    				 Produit prodbis = ProduitsEnVente.getProducts().get(j);
    				 if (prod==prodbis.getNom_produit() && i<1){
    					 produits_commandes.add(prodbis);
    					 ProduitsEnVente.getInstance();
    					 ProduitsEnVente.getProducts().remove(j);
    					  i++;
    				 }
    			 }				
    	}			
     
    		String compo = new String();
    		for (Produit prod2 : produits_commandes){
    			ProduitsEnVente.getInstance();
    			compo = compo +" "+prod2.getNom_produit();
    					}
     
    		System.out.println("Mr "+nom_client+" vient de passer une commande: : "+compo+"");
    		}
    }
    Le but de la méthode CommanderProduits() c'est de regarder, pour chaque String de la liste produits (2 String peuvent être identiques), s'il existe dans le stock de produits (Singleton), un objet Produit qui a ce nom. Si c'est le cas, on ajoute cet objet à la liste produits_commandes (variable d'instance de le classe Commande), et on le supprime du stock de produits.

    Test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ProduitsEnVente.getInstance();
            ProduitsEnVente.DecrisStock();
            List<String> produits = new ArrayList<String>();
     
            produits.add("frite");
            produits.add("frite");
            produits.add("Big Mac");
            produits.add("frite");
     
            Commande com1 = new Commande();
            com1.CommanderProduits("Elodie", produits);
            ProduitsEnVente.getInstance();
            ProduitsEnVente.DecrisStock();
    Sachant qu'il y a plus de 3 frites et 1 Big Mac dans le stock donc pas de soucis de ce côté là

    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Le stock de produits est :  Big Mac Big Mac Big Mac frite frite frite frite frite frite frite frite frite frite frite frite
    Mr Elodie vient de passer une commande: : 
    Le stock de produits est :  Big Mac Big Mac Big Mac frite frite frite frite frite frite frite frite frite frite frite frite
    Rien n'est ajouté à la commande ni enlevé du stock...

    2ème essai pour la méthode CommanderProduits:
    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
    public void CommanderProduits(String nom_client, List<String> produits) {
    		int i;
    		for (String prod : produits){
    			i=0;
    			ProduitsEnVente.getInstance();
    			 for (Produit prodbis : ProduitsEnVente.getProducts()){
    					 if (prod==prodbis.getNom_produit() && i<1){
    					 produits_commandes.add(prodbis);
    					 i++;
     
    				 }
    							}
    						}
    		ProduitsEnVente.getInstance();
    		ProduitsEnVente.getProducts().removeAll(produits_commandes);
    		String compo = new String();
    		for (Produit prod2 : produits_commandes){
    					compo = compo +" "+prod2.getNom_produit();
    					}
     
    		System.out.println("Mr "+nom_client+" vient de passer une commande: : "+compo+"");
    			}
    Le test ne change pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Le stock de produits est :  Big Mac Big Mac Big Mac frite frite frite frite frite frite frite frite frite frite frite frite
    Mr Elodie vient de passer une commande: :  frite frite Big Mac frite
    Le stock de produits est :  Big Mac Big Mac frite frite frite frite frite frite frite frite frite frite frite
    Au moins ici çà fait quelque chose. Ce qui est bien c'est que ce qu'y est commandé est ajoutée à la commande mais lorsque l'on commande plusieurs produits ayant le même nom il n'en retire qu'un (comme ici avec "frite").

    Si quelqu'un voit ce qui m'embête depuis plus de 3h ...

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Si j'ai bien compris ton code le remove je le ferais dans le for, pour chaque produit commandé, tu supprimes dans produitsEnVente

    ProduitsEnVente.getProducts().remove(produitCommander)

    au lieu de stocker la commande et de tout supprimer après.

    Sa devrais résoudre ton problème.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    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
    Citation Envoyé par XxArchangexX Voir le message
    Si j'ai bien compris ton code le remove je le ferais dans le for, pour chaque produit commandé, tu supprimes dans produitsEnVente

    ProduitsEnVente.getProducts().remove(produitCommander)

    au lieu de stocker la commande et de tout supprimer après.

    Sa devrais résoudre ton problème.
    Merci de ta réponse. non çà ne règle pas le problème puisque j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Le stock de produits est :  Big Mac Big Mac Big Mac frite frite frite frite frite frite frite frite frite frite frite frite
    Exception in thread "main" java.util.ConcurrentModificationException
    	at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
    	at java.util.ArrayList$Itr.next(Unknown Source)
    	at Commande.CommanderProduits(Commande.java:19)
    	at Test.main(Test.java:57)
    J'y avais pensé mais le truc c'est que je parcours la liste en même temps que supprimes des éléments donc çà foire.

  4. #4
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    hummm , sinon autre solution mais un peu détourné tu fais un compteur par produit commandé , BicMac 1 Frites 2

    et tu un parcours remove(big mac) remove(frites) remove(frite). Je te donne une intuition il doit exister plus optimisé mais pour l'instant mon intuition n'est pas optimale ^^.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  5. #5
    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
    Je te suis pas trop là ^^

  6. #6
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    excuse moi un peu rapide il n'y a pas l'info qui je pensais .

    Je reprend

    produits_commandes : c'est la liste des produits commandés par le client.

    frite frite Big Mac frite

    ProduitsEnVente.getProducts() : c'est la liste des produits de ton stocke

    Big Mac Big Mac Big Mac frite frite frite frite frite frite frite frite frite frite frite frite


    à partir de la un truc comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for(int i= 0 ; i < produits_commandes.size();i++){
    if(ProduitsEnVente.getProducts() .contains(
    produits_commandes.get(i))
    ProduitsEnVente.getProducts().remove(produits_commandes.get(i))
    else
    System.out.println("Erreur plus de stock :( )
    }
    Mais pour une idée, connais tu les HashMap? pour la gestion de ton stock, sa te simplifierais grandement la vie.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  7. #7
    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
    Euh ouai vite fait dans mon bouquin Java.
    Je regarderais çà demain mais rapidement, en quoi çà simplifierai la gestion de mes commandes?

    En revanche ton code je vois pas trop l'intérêt puisque au départ ma liste produits_commandes est vide donc on ira pas loin dans la boucle...

  8. #8
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    je la voyais à la place de ton removeAll() après la lecture de ton problème viens du fait qu'il ne retire qu'une fois la valeur.

    Enfin pour le HashMap tu peux faire une clé -> valeur dont la clé est unique

    Ainsi tu peux avoir stock[Frites-> 4 bigMac -> 4 MacChiken->8]

    quand tu rajoutes ton stock tu faire HashMap.get("Frites")+1 et après sa donne stock[Frites-> 5 bigMac -> 4 MacChiken->8]

    Pour ta commande tu peux faire pareil

    commande[frite->2 bigmac->1]

    avec sa tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(stock.contains("Frites))
    Stock.get("frites")-commande.get("frites")
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  9. #9
    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
    J'ai trouvé l'erreur:
    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
    import java.util.ArrayList;
    import java.util.List;
    public class Commande {
     
    	private List<Produit> produits_commandes;
     
    	public Commande() {
    		produits_commandes = new ArrayList<Produit>();
    	}
    	public void CommanderProduits(String nom_client, List<String> produits) {
    			for (String prod : produits){
    			int i;
    			i=0;
    			 for (int j=ProduitsEnVente.getProducts().size()-1;i>0;j--){
    				 Produit prodbis = ProduitsEnVente.getProducts().get(j);
    				 if (prod==prodbis.getNom_produit() && i<1){
    					 produits_commandes.add(prodbis);
    					 ProduitsEnVente.getInstance();
    					 ProduitsEnVente.getProducts().remove(j);
    					  i++;
    				 }
    			 }				
    	}			
     
    		String compo = new String();
    		for (Produit prod2 : produits_commandes){
    			ProduitsEnVente.getInstance();
    			compo = compo +" "+prod2.getNom_produit();
    					}
     
    		System.out.println("Mr "+nom_client+" vient de passer une commande: : "+compo+"");
    		}
    }
    C'était j et non pas i.
    Je vais creuser un peu le HashMap

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/09/2014, 22h23
  2. Réponses: 6
    Dernier message: 25/05/2012, 16h45
  3. Custom action url vers une autre liste
    Par ahmedmido dans le forum SharePoint
    Réponses: 4
    Dernier message: 11/08/2008, 17h01
  4. Basuler un élément d'une liste vers une autre liste
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 13/04/2006, 22h55
  5. cherche comment copier le champ vers une autre champ
    Par khier dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 01/07/2005, 12h20

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