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 :

Utilisation de toutes les instances d'une classe dans un while


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Utilisation de toutes les instances d'une classe dans un while
    Bonjour, je rencontre un problème dans l'élaboration d'un projet sur un système de pompe à essence.

    J'ai une classe système avec une méthode afficher_menu_gerant(). Je crée un objet Notre_systeme.

    De l'autre côté j'ai une classe Carburant avec notamment des attributs quantité (int) et Type de carburant (String). Les instances sont "SP95", "SP98" ... les qtés sont toutes à 1000.

    Lorsque je fais appel à ma méthode Notre_systeme.afficher_menu_gerant(), j'aimerais obtenir l'affichage de tous les types de carburants avec leur quantité ...

    J'ai pensé à un Vector, mais je n'arrive pas à le passer dans ma méthode en arguments ... J'ai aussi pensé à un compteur statique de la classe Carburant mais je ne vois pas comment m'en servir (c'est à dire, a parti d'un compteur, appeler un objet de la classe Carburant ).

    Les classes n'ont pas de relations de parentés ...

    Merci d'avance de votre aide !

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Hello,

    question de concept...

    Tu dois connaitre toutes les instances d'une classe? Il faut donc quelque part stocker une liste d'instances de cette classe. Utilise l'interface java.util.List et ses implémentations java.util.ArrayList, java.util.LinkedList, etc...

    Maintenant, lors de la création des objets Essence, ajoute les à la liste. Tu pourras les récupérer par la suite via leur index:

    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
     
    import java.util.*;
     
    class C {
      private static List<Essence> list;
      private static void creerEssence {
        list=new ArrayList<Essence>();
        Essence e = new Essence("SP95", 1000);
         list.add(e);
        e = new Essence("SP98", 1000);
         list.add(e);
        e = new Essence("SP100", 1000);
         list.add(e);
      }
     
      public static void main(String[] arg) {
        // Création des essences dispos
        creerEssence();
     
        // Affiche le contenu de la liste
        for(Essence e:list) {
          System.out.println(e);
        }
     
        // Récupère l'essence numéro 2 (SP100)
        Essence e = list.get(2);
      }
    }
     
    class Essence { /* plein de code */ }
    Il y aurait d'autres manières plus élégantes et plus compliquées de faire ça, par exemple via le pattern Factory, mais je ne pense pas que cela soit indispensable dans ton cas


  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci de ta réponse, j'ai réfléchit entre temps à une autre solution.

    Lorsque j'initialise mes carburants, à l'aide d'une méthode du type initialisation("nom",qté) dans ma classe main, je rentre les informations que je voulais conservé dans deux tableaux statiques de mon objet système que je peux ensuite utiliser sans problème dans ma méthode afficher_menu_gérant(), puisque dans la même classe. Le code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static String[] Liste_nom_carburant;
    {
    	// Contient la liste des noms de carburants
    	Liste_nom_carburant = new String[25];
    }
     
    public static Float[] Liste_qte_carburant;
    {
    	// Contient la liste des quantités de carburants
    	Liste_qte_carburant = new Float[25];
    }
    Qu'en pensez vous ? Et avez vous une astuce pour créer un tableau dynamique (c'est à dire où je n'aurai pas besoin de spécifier sa taille). Car je n'ai pas réussi à faire fonctionner mon programme sans spécifier les tailles des tableaux.

    Merci

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Pour les tableaux dynamiques il faut utiliser ArrayList.

    Pour la conception j'aurais préféré créer une classe style ConsomationCarburant contenant les propriétés nom et quantité, et faire un tableau de cette classe. C'est plus facile de gérer un seul tableau dont chaque élément est complet, que deux tableaux qu'il faut coordonner. Question de goût.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai suivi vos conseils/remarques pour utiliser plutôt Arraylist, et un nouveau problème se pose pour moi :

    J'ai définit deux Arraylist consécutivement pour modéliser ma station essence :

    Système => Plusieurs Cuves
    Cuves => Plusieurs pompes.

    Pour accèder à la pompe, je dois donc utiliser :

    Systeme.Liste_Cuve.get(X).Liste_pompe.get(Y).....

    J'ai voulu créer une méthode get_pompe(x,y) pour me simplifier la vie de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static Object get_pompe(int c, int c1){	
    		return Systeme.Liste_cuve.get(c).Liste_pompe.get(c1);
    	}
    En sachant que j'ai essayé à la place de Object de mettre ArrayList<Pompe> et ArrayList, mais cela ne marche pas ... Pouvez m'indiquer ce qui ne va pas ?

  6. #6
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Beaucoup de choses me paraissent étonnantes dans ce que tu fais. Qu'est-ce que tu utilises comme doc pour te former ? Dans quel contexte fais-tu tout ça ?

    Pour en revenir au sujet, comment as-tu déclaré tes Systemes et Cuves ?

  7. #7
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Points : 380
    Points
    380
    Par défaut
    Petit rappel de java, une Liste de QuelqueChose s'écrit Liste<QuelqueChose>
    Ca peux durer longtemps comme ça (listes de listes ...)

    Fait une classe par type d'objet que tu peux identifier dans ton problème !

    Ici, je vois que tu a besoin d'un Systeme, d'une Cuve, d'une Pompe et d'un Carburant
    4 classes minimums dont 3 vont ressembler à des listes (n'hérite pas d'une liste, fait des méthodes pour acceder à une liste privée).

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Il serait peut-être judicieux d'utiliser une enum pour les différents type d'essence.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public enum Essence {
        SP95,
        SP98,
        SP100;
    }
    Il est ensuite possible de récupérer un tableau contenant la totalité des Essences via la méthode Essence.values() (cf [Java 5.0] Qu'est-ce qu'une enum (type énuméré) ?)

    Ensuite l'association essence/quantité pourrait se faire avec une Map.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private Map<Essence, Float> quantitésEssence = new HashMap<Essence, Float>();
    quantitésEssence.put(Essence.SP95, 1000.0F);
    quantitésEssence.put(Essence.SP98, 1000.0F);
    quantitésEssence.put(Essence.SP100, 1000.0F);

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Beaucoup de choses me paraissent étonnantes dans ce que tu fais. Qu'est-ce que tu utilises comme doc pour te former ? Dans quel contexte fais-tu tout ça ?

    Pour en revenir au sujet, comment as-tu déclaré tes Systemes et Cuves ?
    Je me forme avec un poly de cours qui n'est pas vraiment bien fait, donc je fais des recherches sur le net, mais je suis conscient de mes lacunes :/, je suis en apprentissage ^^

    Pour ce qui est de mes classes systeme et cuves, voici comment je les déclare (généra par Omodo) :

    Dans mon Cuve.java
    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
     
    import java.util.ArrayList;
     
     
    public class Cuve {
     
    private float Qte;
    private int Reference;
    //Variable qui renvoit la place dans Liste_cuve (ArrayList)
    public ArrayList<Pompe> Liste_pompe;
    public ArrayList<Carburant> Liste_carburant;
    private String Type_cuve;
     
    float getQte();
    {
    	return Qte;
    }
     
    public void setQte(float Qte ){
    	this.Qte = Qte;
    }
     
    public int getReference()
    {
    	return Reference;
    }
     
    public void setReference(int Reference ){
    	this.Reference = Reference;
    }
     
    public void initialisation_cuve(String Nom, int reference){
    	this.setType_cuve(Nom);
    	Systeme.Liste_cuve.add(this);
    	this.setReference(reference);
    	}
     
    public String getType_cuve()
    {
    	return Type_cuve;
    }
     
    public void setType_cuve(String Type_cuve ){
    	this.Type_cuve = Type_cuve;
    }
     
     
    public void initialisation_listes(){
    	Liste_carburant = new ArrayList<Carburant>(3);
    	Liste_pompe = new ArrayList<Pompe>(6);
    	}
    }
    Dans mon code Systeme avec en gras, 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
    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
    import java.util.ArrayList;
    
    public class Systeme {
    
    	public static float somme_carburant=0;
    	//Permet de connaitre le total des cuves
    	
    	private String type_utilisateur="null";
    
    	public static ArrayList<Cuve> Liste_cuve;
    	
    	public void afficher_menu_client(){
    	System.out.println("**********************************");
    	System.out.println("Bienvenu Client");
    	System.out.println("**********************************");
    	System.out.println("");
    	System.out.println("Sélectionnez une pompe :");
    	
    	//Déclaration de compteur
    	int compteur =0;
    	int compteur2 = 0;
    	int choix = 1;
    	// Variable qui sert dans la boucle a indiqué le numéro du choix
    	// puis prend ce que l'utilisateur tape au clavier
    	while (compteur < Systeme.Liste_cuve.size())
    	{
    		while (compteur2 < Systeme.Liste_cuve.get(compteur).Liste_pompe.size())
    			{	
    			System.out.println(choix+ ": "+Systeme.Liste_cuve.get(compteur).Liste_pompe.get(compteur2).getNom_pompe());
    			compteur2++;
    			choix++;
    			}
    	compteur2 = 0;
    	compteur ++;	
    	}
    	while (choix<1 || choix>6)
    	{
    		choix = Integer.parseInt(Run.Flux_clavier());
    	}
    	switch (choix){
    	case : 1
    	System.out.println(Pompe.get_pompe(0,1).toString());
    	break;
    	}
    }
    	
    	public void controle_cuve(int ref_cuve){
    	int x;
    	x=(int)(Systeme.Liste_cuve.get(ref_cuve).getQte());
    	if (x <= 10000)
    	{
    		System.out.println("Il faut remplir la cuve "+Systeme.Liste_cuve.get(ref_cuve).getType_cuve());
    	}
    }
    
    	public void afficher_menu_gerant(){
    		
    		System.out.println("**********************************");
    		System.out.println("Bienvenu Gérant");
    		System.out.println("**********************************");
    		System.out.println("");
    		System.out.println("Voici les quantités des cuves");
    		//Definition de compteur pour les boucles
    		int compteur = 0;
    		int compteur2 = 0;
    		while (compteur < Systeme.Liste_cuve.size())
    		{
    		System.out.println("---------------------------------------");
    		System.out.println("Nom : " + Systeme.Liste_cuve.get(compteur).getType_cuve() + "	Quantité : " + Systeme.Liste_cuve.get(compteur).getQte());
    		System.out.println("---------------------------------------");
    		while (compteur2 < Systeme.Liste_cuve.get(compteur).Liste_carburant.size())
    			{
    			System.out.println("Nom : " + Systeme.Liste_cuve.get(compteur).Liste_carburant.get(compteur2).getType_carburant() + "	Quantité : " + Systeme.Liste_cuve.get(compteur).Liste_carburant.get(compteur2).getQte());
    			compteur2 ++;
    			}
    		System.out.println("");
    		compteur2 = 0;
    		compteur ++;
    		}
    		compteur =0;
    		//Contrôle des cuves.
    		while (compteur < Systeme.Liste_cuve.size())
    		{
    			this.controle_cuve(compteur);
    			compteur++;
    		}
    	}
    
    
    public String getType_utilisateur()
    {
    	return type_utilisateur;
    }
    
    public void setType_utilisateur(String type_utilisateur ){
    	this.type_utilisateur = type_utilisateur;
    }
    public void initialiser_liste(){
    	Liste_cuve = new ArrayList<Cuve>(5);
    	}
    }

  10. #10
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Ta variable (??) Pompe n'est pas initialisée ... A moins que ta méthode get_pompe(x,y) ne soit statique et tapes sur la classe Pompe directement ... mais comme je ne vois pas où tu lui files les données à rechercher ....

  11. #11
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Il n'y a pas que tes lacunes, il y a que les polis sont probablement mauvais. Un débutant ne fait pas de pareilles maladresses sans un support de cours mauvais.

    Moi je te suggèrerais de tout mettre à la poubelle, et de te former avec Penser en java, ou avec The Java Tutorials. Il y a aussi "Java pour les enfants" consultable en ligne ! Voilà au moins de bonnes bases. Nous pourrons t'aider plus facilement.

    De ton texte, cela veut dire quoi généra par Omodo ?

    Pour ton erreur, je pense que miloux32 a raison.

  12. #12
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    De ton texte, cela veut dire quoi généra par Omodo ?
    Il veut sans doute parler du plugin Omondo, qui sert à générer du code à partir de diagrammes de classes... donc d'un niveau bien trop élevé pour un débutant...

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Oui, je parlais du plug-in Omodo, je trouve aussi que pour un projet de cette ampleur plutôt faible, cela n'est pas vraiment utile, mais notre chargé de TP nous oblige à l'utiliser ...

    J'ai regardez le cours "java pour enfants" qui m'a déjà permis de comprendre bien plus de choses ... "Penser en java", je l'ai un peu moins regardé mais je compte le faire quand j'aurai le temps (le problème est que je n'ai pas que ce projet à faire dans mes études ).

    Sinon ma variable est effectivement initialisée ailleurs.

    Pour ma question, j'ai trouvé une réponse, je ne sais pas ce que vous en pensez, mais cela fonctionne (transtypage)

    J'appelle ma méthode statique "get_pompe(int,int)" qui retourne un objet dans mon objet Systeme. Juste avant cet appel, je crée un objet de type Pompe appelé "pompe_selected" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pompe pompe_selected = new Pompe();
    pompe_selected = (Pompe) Pompe.get_pompe(0,0);

Discussions similaires

  1. WMI : Nom de toutes les instance d'une classe
    Par Chachane dans le forum C++
    Réponses: 1
    Dernier message: 02/07/2010, 15h34
  2. comment trier les instances d'une classe selon un attribut choisi
    Par rddev dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/05/2007, 00h01
  3. Accéder à toutes les instances d'une classe
    Par MrGecko dans le forum Delphi
    Réponses: 15
    Dernier message: 14/05/2007, 00h50
  4. Utilisation de Tout les champs d'une table
    Par MeRc|LeSs dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/07/2006, 20h55
  5. Connaitre toutes les instances d'une classe
    Par miniseb dans le forum Langage
    Réponses: 14
    Dernier message: 09/01/2006, 17h35

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