CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

hashset et iterator [JAVA] comment ajouter un objet ?

coquine_93
coquine_93
Niveau 7
30 novembre 2016 à 20:40:22

Salut [[sticker:p/1kkr]]

Je cherche à ajouter dans mon hashset, un objet en l'occurrence de type "penny" ?
Pour cela j'ai taper dans mon constructeur ces deux lignes :


  HashSet hashSetPenny = new HashSet();
  hashSetPenny.add(new Penny());

qui devraient initialiser un objet penny à mon hashset

Je rencontre aussi une erreur dans ma méthode pennyCount qui me dit qu'il n'y a pas d'objet initialisé (ce que j'ai initialisé dans mon constructeur)...

Merci [[sticker:p/1ljp]]

 
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Iterator;

public class Pocket
{
    int sizeOfPocket;
    private HashSet<Penny> hashSetPenny;
    
    public Pocket(int sizeOfPocket)
    {   
        for(int counter = 0; counter < sizeOfPocket ; counter++ )
        {
            this.sizeOfPocket = sizeOfPocket;
            HashSet hashSetPenny = new HashSet();
            hashSetPenny.add(new Penny());
        } 
    }
    

    public int pennyCount()
    {
        return hashSetPenny.size();
    }
    
    public Penny removePenny(Penny penny)
    {
        Iterator<Penny> it = new Iterator<Penny>();
        Iterator <Penny> it = hashSetPenny.iterator();
        if (it.hasNext())
        {
          hashSetPenny.remove(penny);
        }
        else
        {
          return null;
        }
        return penny;
}
}
Elmohe
Elmohe
Niveau 9
30 novembre 2016 à 20:46:44

J'y connais pas grand chose en Java, mais à ce que j'ai vu, ta classe a un attribut privé
private HashSet<Penny> hashSetPenny;
Alors que dans le constructeur, tu as
HashSet hashSetPenny = new HashSet();
Que j'aurais à ta place essayé de remplacer en
hashSetPenny = new HashSet();
ou
this.hashSetPenny = new HashSet();

andryrdev
andryrdev
Niveau 10
30 novembre 2016 à 22:05:55

Il y a ce qu'a dit elmohe, et il faut aussi initialiser ton hashset en dehors de ta boucle for

DaMoY
DaMoY
Niveau 10
01 décembre 2016 à 12:13:20

Oui, pourquoi initialiser sizeOfPocket fois ?

coquine_93
coquine_93
Niveau 7
01 décembre 2016 à 21:54:50

Merci de vos réponses [[sticker:p/1kki]]

J'ai remplacé mon code pour le constructeur par cela mais lorsque j'appelle la méthode pennyCount, ce qui est retourné est seulement 1 (lorsque je lui demande pour sizeOfPocket = 10 dans les paramètres)...
En l'occurrence je devrai avoir 10...

merci

mon code :



import java.util.HashSet;
import java.util.ArrayList;
import java.util.Iterator;

public class Pocket
{
    int sizeOfPocket;
    private HashSet<Penny> hashSetPenny;
    
    public Pocket(int sizeOfPocket)
    {   
        hashSetPenny = new HashSet();
        
        for(int counter = 0; counter < sizeOfPocket ; counter++ )
        {
            this.sizeOfPocket = sizeOfPocket;
            hashSetPenny = new HashSet();
            hashSetPenny.add(new Penny());
        } 
    }
    

    public int pennyCount()
    {
        return hashSetPenny.size();
    }
    
Elmohe
Elmohe
Niveau 9
01 décembre 2016 à 22:26:12
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Iterator;

public class Pocket
{
    int sizeOfPocket;
    private HashSet<Penny> hashSetPenny;
    
    public Pocket(int sizeOfPocket)
    {   
        hashSetPenny = new HashSet();
        
        for(int counter = 0; counter < sizeOfPocket ; counter++ )
        {
            this.sizeOfPocket = sizeOfPocket;
            hashSetPenny = new HashSet(); <-------- Vire cette ligne
            hashSetPenny.add(new Penny());
        } 
    }
    

    public int pennyCount()
    {
        return hashSetPenny.size();
    }

En fait cette ligne fait que tu prend hashSetPenny, et tu le remet à zéro, à chaque tour de boucle.
En dehors de ta for, juste au-dessus, tu l'as déjà initialisé. Donc en enlevant cette ligne, tout devrait marcher :)

coquine_93
coquine_93
Niveau 7
02 décembre 2016 à 13:24:36

merci l'ami [[sticker:p/1ljp]]

Sur ma méthode removePenny() , j'ai essayer de faire fonctionner mon iterator mais je suis sur que je ne suis pas loin du tout !



    public Penny removePenny(Penny penny)
    {
        Iterator<Penny> iterator = hashSetPenny.iterator();
        if (iterator.hasNext()) {
            
            hashSetPenny.remove(penny);
            pennyCount(); 
            //return hashSetPenny.size();            
        }
        else if (!iterator.hasNext())
        {
            return null;
        }
        
        return penny;
    }

Lorsque j'appelle cette méthode et que je fais passer comme paramètre un penny objet, cela me renvoie seulement le penny objet et aucun penny objet est enlevé...

Merci [[sticker:p/1lm9]]

Elmohe
Elmohe
Niveau 9
02 décembre 2016 à 17:10:53

Je comprends pas trop ce que tu veux faire... Si c'est juste une fonction pour enlever un objet de la liste tu peux pas juste hashSetPenny.remove(penny) quand tu en as besoin en testant si penny est dans la liste ?

coquine_93
coquine_93
Niveau 7
02 décembre 2016 à 17:19:21

Oui c'est juste une méthode qui sert à enlever un objet de mon hashSetPenny, mais en l'occurrence c'est ce que je fais (mis à part si je ne comprends pas ce que fait un interator) avec mon iterator non ? [[sticker:p/1jnh]]

Elmohe
Elmohe
Niveau 9
02 décembre 2016 à 17:24:53

Oui mais justement je me demandais (après je connais pas trop le java), si un iterator sert vraiment à quelque chose quoi.
Si c'est ça la cause du problème alors que tu pouvais faire plus simple... (Je me trompe peut-être)

coquine_93
coquine_93
Niveau 7
03 décembre 2016 à 14:29:22

On m'a conseillé un iterator pour faire cela...
Si ce n'est pas un iterator comment aurai tu procéder ?
merci

Elmohe
Elmohe
Niveau 9
03 décembre 2016 à 18:22:31

Bah je sais pas, tout simplement utiliser la fonction pour retirer l'objet de la liste ?

coquine_93
coquine_93
Niveau 7
04 décembre 2016 à 18:22:16

Oui je cherche à créer une méthode qui retire cet objet de la liste, elle n'est pas créer

0x5f3759df
0x5f3759df
Niveau 7
04 décembre 2016 à 19:25:03

Dans la class Penny redéfinie les méthodes hashCode() et equals()

coquine_93
coquine_93
Niveau 7
04 décembre 2016 à 20:01:29

Je cherche à revoir la méthode removePenny() en utilisant un iterator (je veux absolument utiliser un iterator) [[sticker:p/1ljp]]

0x5f3759df
0x5f3759df
Niveau 7
04 décembre 2016 à 21:52:17

public Penny removePenny(Penny penny) {
        Iterator<Penny> iterator = hashSetPenny.iterator();

        if (iterator.hasNext()) {
            Penny iterPenny = iterator.next();

            if (iterPenny.equals(penny) { // méthode equals() à redéfinir
                iterator.remove(); // Suppression de la dernière valeur retournée par next()
                pennyCount();
                return iterPenny;         
            }
            return null;
        }
}

Tout ça peut être réduit à :
hashSetPenny.removeIf(item -> item.equals(penny));

Message édité le 04 décembre 2016 à 21:55:07 par 0x5f3759df
Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment