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

Java Discussion :

Développer un itérateur


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Par défaut Développer un itérateur
    Bonjour,

    J'ai développé une petite classe de liste d'entier pour les besoins d'un projet.

    Je voudrais pouvoir itérer sur les listes comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ListInt ls = new ListInt();
     
    for (i : ls)
    {
    ...
    }
    comme on peut le faire avec les List. Qu'est-ce que je dois implémenter pour y arriver ?

    Cordialement

    deb2014
    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
     
    public class ListInt
    {
    	protected int size;
     
    	class NodeInt
    	{
    		protected int data;
    		protected NodeInt next;
     
    		public NodeInt(final int data)
    		{
    			this.data = data;
    			next = null;
    		}
     
    		public boolean hasNext()
    		{
    			return next != null;
    		}
     
    		public NodeInt next()
    		{
    			return next;
    		}
     
    		public int getData()
    		{
    			return data;
    		}
    	}
     
    	protected NodeInt head, tail;
     
    	public ListInt()
    	{
    		size = 0;
    		head = tail = null;
    	}
     
    	public NodeInt getHead()
    	{
    		return head;
    	}
     
    	public boolean isEmpty()
    	{
    		return head == tail;
    	}
     
    	public void add(final int data)
    	{
    		if (size == 0)
    		{
    			head = new NodeInt(data);
    			tail = head;
    		}
    		else
    		{
    			tail.next = new NodeInt(data);
    			tail = tail.next;
    		}
    		size++;
    	}
    }

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    seuls les tableaux peuvent utiliser cette syntaxe for sur des ints :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int[] desEntiers = {1, 2, 3};
     
    for(int i : desEntiers) {
      System.out.println(i);
    }
    Ça, ça marche, avec un tableau. Mais aucune classe ne peut itérer des ints de la même façon. Ni itérer aucun type primitif.

    Par contre, les classes peuvent être définies pour itérer des objets : String, Integer, LocalDate ou ce qu'on veut.

    Exemple, supposons que je définisse une classe comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class MaListe implements Iterable<String> {
      // le code qui va bien
    }
    alors on peut utiliser cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaListe liste = new MaListe();
     
    for(String s : liste) {
      System.out.println(s);
    }
    Bien sûr, comme MaListe implémente Iterable<String>, elle doit fournir la méthode public Iterator<String> iterator(); qui elle-même doit fournir un objet qui implémente Iterator<String>, qui fournit les méthodes
    public boolean hasNext(); et public String next(); .

    Un peu de travail donc, mais ça se fait.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Par défaut
    Merci bien pour votre réponse.

    Effectivement, on ne peut pas utiliser Iterable<> avec des types primitifs.

    Du coup, j'ai développé mon propre itérateur.

Discussions similaires

  1. Comment Développer en équipe ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 45
    Dernier message: 19/11/2007, 00h15
  2. Quel outil choisir pour un développement SQL-Server ?
    Par Mouse dans le forum Débats sur le développement - Le Best Of
    Réponses: 23
    Dernier message: 12/08/2003, 06h23
  3. Quel outil pour du développement Client/Serveur (Win XP) ?
    Par jey_bonnet dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 02/11/2002, 14h57
  4. [Kylix] Kylix et le développement web...
    Par nahmsath dans le forum EDI
    Réponses: 4
    Dernier message: 24/10/2002, 19h27
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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