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 :

Iterator et Clone


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2003
    Messages : 59
    Points : 39
    Points
    39
    Par défaut Iterator et Clone
    Bonjour,

    Suite à la réalisation d'un exercice, je suis resté bloquer sur une partie d'énoncé.

    Je dois crée une méthode Iterator<Instruction> instructions () qui ne doit pas accéder aux instructions stockées mais à des clones de celles-ci, renvoi une instance de la classe interne privée InstructionIterator qui implemente Iterator<Instruction>.

    Cette classe doit aussi ne pas supprimer des instructions lors d'un parcours.

    J'ai cherché sur le net des exemples, des explications que j'ai essayé mais la j'avoue que je suis complétement perdu.

    Merci pour votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Tu pourrais peut-être nous parler de la classe Instruction et de la classe qui contient la méthode instructions(), si tu veux qu'on te mette sur une piste...

    On va pas deviner, hein.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2003
    Messages : 59
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Tu pourrais peut-être nous parler de la classe Instruction et de la classe qui contient la méthode instructions(), si tu veux qu'on te mette sur une piste...

    On va pas deviner, hein.
    Voila la classe Instruction, mais je vois pas pourquoi tu me parle de la méthode instruction
    L'énoncé que j'ai mis dois etre implementé dans la classe Plat.

    Merci

    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
     
    package cuisine;
     
    public class Instruction implements Cloneable{
    	private String description;
    	private int duréeEnMinutes;
     
    	public Instruction(String description, int duréeEnMinutes)
    	{
    		this.description = description;
    		this.duréeEnMinutes = duréeEnMinutes;
    	}
     
    	public String getDescription() {
    		return description;
    	}
     
    	public void setDescription(String description) {
    		this.description = description;
    	}
     
    	public int getDuréeEnMinutes() {
    		return duréeEnMinutes;
    	}
     
    	public void setDuréeEnMinutes(int duréeEnMinutes) {
    		this.duréeEnMinutes = duréeEnMinutes;
    	}
     
    	public String toString()
    	{
    		return description;
    	}
     
    }

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour créer une classe qui implémente Iterator<Instruction>, il suffit de mettre dans sa entête "implements Iterator<Instruction>" et de coder les trois méthodes qui s'y trouvent . Pour coder les méthodes, a mon a vis, le plus simple est de se baser sur un iterator courant, tu n'aura plus qu'à déléguer les appels qui doivent l'être.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MyIterator implements Iterator<Instruction>{
     private Iterator<Instruction> baseIterator;
     public MyIterator(Iterator<Instruction> baseIterator){
         this.baseIterator = baseIterator;
     }
     public boolean 	hasNext(){ 
        return baseIterator.hasNext();
     }
     public Instruction next(){
         return baseIterator.next().clone();
     }
     public void remove() { throw new UnsupportedOperationException("Delete forbidden");}
    }
    puis sa création deviens simple comme bonjour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new MyIterator(listeDinstruction.iterator())

  5. #5
    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
    + réécrire pour Instruction une méthode public clone() qui ne déclenche pas d'Exception .....
    quoique ce serait plus simple de ne pas cloner et d'avoir un objet Instruction immuable!
    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)

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2003
    Messages : 59
    Points : 39
    Points
    39
    Par défaut
    Merci, je vais tester tous ça.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2003
    Messages : 59
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    J'ai un problème quand j'essaye de crée cette méthode listerIngrédients.

    j'ai le .add souligné en rouge, je vois pas d'où pourrait venir l'erreur.

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public List<Ingrédient> listerIngrédients()
    	{
    		Set<Map.Entry<Ingrédient, Quantité>> entree = ingrédients.entrySet();
    		Iterator<Map.Entry<Ingrédient, Quantité>> iter = entree.iterator();
    		while (iter.hasNext()){
    			Map.Entry<Ingrédient, Quantité> entrees = (Map.Entry<Ingrédient, Quantité>)iter.next();
    			ArrayList<Ingrédient> temp = temp.add(entrees.getKey(), entrees.getValue());
    		}
    		return temp;
     
    	}

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    vous devez définir et initialiser votre ArrayList avant la boucle. Add ne prend qu'un paramètre. Et accessoirement supprimer les typecasting et circonvolutions inutiles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public List<Ingrédient> listerIngrédients()
    	{
                    ArrayList<Ingrédient> temp = new ArrayList<Ingrédient>();
    		for(Map.Entry<Ingrédient, Quantité> entrees: ingrédients.entrySet()){
    			temp.add(entrees.getKey());
    		}
    		return temp;
    	}

Discussions similaires

  1. Iteration VS recursivité
    Par yacinechaouche dans le forum C
    Réponses: 40
    Dernier message: 16/11/2012, 11h52
  2. [débutant][struts] iterate imbriquée
    Par muim dans le forum Struts 1
    Réponses: 6
    Dernier message: 19/02/2004, 15h13
  3. [debutant]iterator
    Par Wis dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 05/05/2003, 10h49
  4. vInt::iterator
    Par Monstros Velu dans le forum C++
    Réponses: 19
    Dernier message: 05/04/2003, 15h06

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