Affichage variable hashset java
mfpresta13
-
mfpresta13 -
mfpresta13 -
Bonjour,
Tout d'abord voici ma classe:
Je souhaite afficher le nom de chaque composant du cocktail (whisky et coca) avec la méthode affComposition() mais actuellement ça me retourne le nom du cocktail (whisky-coca). Comment faire pour afficher le nom de chaque composant ?
Désolée je débute et j'ai encore du mal à comprendre l'objet.
Cordialement
Tout d'abord voici ma classe:
import java.util.HashSet;
import java.util.Iterator;
public class Cocktail extends Boisson{
public double degreAlcool;
public double grammeSucre;
protected boolean alcoolise;
protected HashSet<Boisson> composition; // composition = collection de boisson
// constructeur
public Cocktail(String nom, Double prix) {
super(nom, prix);
this.composition = new HashSet<Boisson>();
}
// Parcourt de la collection composition pour afficher les composants du cocktail
public String affComposition()
{
Iterator<Boisson> it = composition.iterator();
while (it.hasNext())
{
System.out.println(it.next());
}
return "Composants: "+nom;
}
public static void main(String[] args)
{
BoissonAlcoolisee whisky = new BoissonAlcoolisee("whisky", 2.00, 40, 0.4);// nom, prix, qte, degreAlcool
BoissonNonAlcoolisee coca = new BoissonNonAlcoolisee("coca", 0.05, 40, 4.4); // nom, prix, qte, gramme de sucre
Cocktail whisky_coca = new Cocktail("whisky-coca", 6.00); // nom, prix
whisky_coca.ajoutComposant(whisky);
whisky_coca.ajoutComposant(coca);
System.out.println(whisky_coca.affComposition());
}
}
Je souhaite afficher le nom de chaque composant du cocktail (whisky et coca) avec la méthode affComposition() mais actuellement ça me retourne le nom du cocktail (whisky-coca). Comment faire pour afficher le nom de chaque composant ?
Désolée je débute et j'ai encore du mal à comprendre l'objet.
Cordialement
A voir également:
- Affichage variable hashset java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
1 réponse
Je ne pense pas que ce soit vraiment une mauvaise compréhension de l'objet HashSet mais plus la manière dont tu as fait ta méthode.
Tu dis "je veux afficher le nom de chaque composant", ce qui correspond bien au System.out.println(it.next()); qui doit faire l'affichage correctement.
Et ensuite tu dis "ça me retourne le nom du cocktail", ce qui est une chose tout à fait différente, et parfaitement normal puisque tu fais return "Composants: "+nom;
La question est donc qu'est-ce que dois faire cette méthode ? Afficher, ou renvoyer un résultat ?
Si au lieu de faire System.out.println(whisky_coca.affComposition()); tu fais directement whisky_coca.affComposition(); tu devrais avoir directement ce que tu veux.
Remarque : plutôt que d'utiliser tes propres méthodes d'affichage, il vaut mieux surcharger la méthode toString, c'est beaucoup plus propre !
Tu dis "je veux afficher le nom de chaque composant", ce qui correspond bien au System.out.println(it.next()); qui doit faire l'affichage correctement.
Et ensuite tu dis "ça me retourne le nom du cocktail", ce qui est une chose tout à fait différente, et parfaitement normal puisque tu fais return "Composants: "+nom;
La question est donc qu'est-ce que dois faire cette méthode ? Afficher, ou renvoyer un résultat ?
Si au lieu de faire System.out.println(whisky_coca.affComposition()); tu fais directement whisky_coca.affComposition(); tu devrais avoir directement ce que tu veux.
Remarque : plutôt que d'utiliser tes propres méthodes d'affichage, il vaut mieux surcharger la méthode toString, c'est beaucoup plus propre !
Cette méthode doit retourner une chaine avec les composants du cocktail (whisky et coca).
Quand je met directement whisky_coca.affComposition(); sans le System.out.println j'obtiens ceci: BoissonNonAlcoolisee@2a9931f5
BoissonAlcoolisee@525483cd et c'est là que je ne vois pas à quoi ça correspond. Je veux juste que whisky et coca s'affichent. Mais je ne vois pas comment faire :(
Redéfinis les méthodes de la classe Object autant que possible (toString, equals, hashCode...)
J'ai donc:
// Parcourt de la collection composition pour afficher les composants du cocktail public String affComposition() { Iterator<Boisson> it = composition.iterator(); while (it.hasNext()) { it.next(); } return "Composants du "+this.nom+": "+composition; }Et il me retourne bien Composants du whisky-coca: [Composants non alcoolisés: coca, Composants alcoolisé: whisky].
Mais admettons que dans une autre méthode je veuille retourner cette fois ci la quantité de chaque composant du cocktail:
Coca: 40ml, Whisky: 40ml
private double qte() { Iterator<Boisson> it = composition.iterator(); while (it.hasNext()) { it.next(); } return "Quantité de chaque composant du "+this.nom+": "+composition; }Je ne peux pas faire 2 toString (un pour le nom et un pour la quantité) et je ne peux pas tout mettre (quantité, nom ...) dans le même toString étant donné que j'ai une méthode pour chaque attribut. Donc comment je peux faire pour "cibler" les attributs de mon HashSet composition ?
Je serai tenté de faire un et un mais malheureusement ça ne fonctionne pas comme cela.
J'espère que je suis claire :$
Nul part tu ne te sers de it.next, c'est comme si tu ne le mettais pas :
public String affComposition() { return "Composants du "+nom+" : "+composition; }L'affichage "[Composants non alcoolisés: coca, Composants alcoolisé: whisky]" vient tout simplement de la méthode composition.toString(), en aucun cas tu n'as toi même décomposé le hashSet.
Voici une autre méthode qte(), qui décompose le hashSet pour en extraire les données :
public String double qte() { StringBuilder sb = new StringBuilder("Quantité de chaque composant du ") .append(nom).append(" :"); Iterator<Boisson> it = composition.iterator(); while (it.hasNext()) { Boisson b = it.next(); sb.append(" ").append(b.nom()).append(b.qte()); } // Remarque, je préfère cette écriture (plus claire) // for (Boisson b : composition) // sb.append(" ").append(b.nom()).append(b.qte()); return sb.toString(); }Remarque : ici qte() renvoit un String, ce qui peut poser un problème si la classe mère Boisson définit la méthode qte() comme renvoyant un double...
Cordialement