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 :

curseur de liste générique


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 24
    Points
    24
    Par défaut curseur de liste générique
    bonjour,

    j'ai créé une classe Liste

    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
     
    public class Liste<Template>
    	{
    	protected class Element
    		{
    		protected Template element = null;
    		protected Element suivant = null;
     
    		public Element (Template e)
    			{
    			element = e;
    			suivant = null;
    			}
    		}
     
    	protected Element premier = null;
    	protected Element dernier = null;
     
    	protected int quantite = 0;
     
    	public int getQuantite ()
    		{
    		return quantite;
    		}
     
    	public void add (Template nouveau)
    		{
    		if (nouveau == null)
    			return;
     
    		Element elem = new Element (nouveau);
     
    		if (dernier != null)
    			dernier.suivant = elem;
    		else
    			premier = elem;
     
    		dernier = elem;
     
    		quantite++;
    		}
           }
    jusque là tout va bien,

    le problème c'est que j'ai plusieurs thread qui parcours la liste en même temps

    je dois donc créé un curseur

    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
     
    public class ListeCurseur<Template>
    	{
             ...
     
    	public class Curseur
    		{
    		protected Element premier;
    		protected Element temp;
     
    		private Curseur (Element premier)
    			{
    			this.premier = premier;
    			this.temp = null;
    			}
     
    		public Template getPremier ()
    			{
    			temp = premier;
     
    			if (temp != null)
    				return temp.element;
    			else
    				return null;
    			}
     
    		public Template getSuivant ()
    			{
    			if (temp == null)
    				return null;
     
    			temp = temp.suivant;
     
    			if (temp == null)
    				return null;
     
    			return temp.element;
    			}
    		}
     
    	public Curseur getCurseur ()
    		{
    		return new Curseur (premier);
    		}
            }
    et donc avec cette methode, il ne reste plus qu'a faire

    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
     
     
    	public void une_fonction ()
    		{
    		Liste<Machin> liste = new Liste<Machin> ();
     
    		liste.add (new Machin ());
    		liste.add (new Machin ());
    		liste.add (new Machin ());
    		liste.add (new Machin ());
     
    		Curseur curseur = liste.getCurseur ();
     
    		for (Machin machin = curseur.getPremier ();machin != null; machin = curseur.getSuivant ())
    			machin.fait_un_truc ();
    		}
    et comme ca aucun probleme pour parcourir la liste meme si 2 objets differents la parcourent en meme temps

    le problème, c'est que et me renvoient un Object et pas un Machin ....

    si j'utilise le curseur au sein de la classe Liste ca passe, mais si je l'utilise dans une autre classe ca passe pas ...

    qu'est ce qui cloche ? que dois-je faire ?

    merci de vos reponses

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Petite remarque
    le problème c'est que j'ai plusieurs thread qui parcours la liste en même temps
    pourquoi n'utilise tu pas les itérateurs? il ont été conçu pour facilité la vie des gens dans ce genre de situation.

    Retour au sujet :
    me renvoient un Object et pas un Machin
    Dans ce cas fais du "transtipage"(j'suis plus trop sur si ça s'appel comme ça mais bon)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Machin machin = (Machin) curseur.getPremier ();
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    Salut,

    T'as du mal copier coller ton code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Liste<Machin> liste = new Liste<Machin> ();
    Curseur curseur = liste.getCurseur ();
    Sauf que ta classe Liste ne contient pas la méthode getCurseur().
    Seul la classe ListeCurseur la possède.
    Edit le bon code stp sinon ca nous oblige à faire trop de suppositions
    Ils flottent tous en bas

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    a vi

    vraiment désolé (la classe Liste et ListeCurseur sont les meme)

    j'utilise cette classe Liste a beaucoup d'endroit, et ca fait pas très propre des cast dans tous les sens ...

    par contre, je vais chercher du coté des iterateurs (en espérant que je puisse les adapter à ma classe)

    merci

  5. #5
    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
    Si c'est dans un vrai projet, ou du moins si le but n'est pas d'apprendre à implémenter soi-même une liste, dans ce cas... Pourquoi avoir fait une classe List au lieu de celles qui sont déjà là ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    effectivement, c'est dans le cas d'un projet personnel

    je viens du c++ et je découvrais java, je ne connaissais pas le principe des classes déjà existantes et que l'on peut (dois...) réutiliser

    et donc j'ai créé ma classe Liste, le problème, c que maintenant mon projet est très avancé et je me vois mal remplacer toutes les occurrences.

    Et puis j'aime bien ma classe Liste, elle fonctionne bien quoi ...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 24
    Points
    24
    Par défaut
    ca y est, j'ai trouvé la réponse

    l'implémentation de mon curseur est correcte

    c'est à la création que ca foirait

    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
    	public void une_fonction ()
    		{
    		Liste<Machin> liste = new Liste<Machin> ();
    		
    		liste.add (new Machin ());
    		liste.add (new Machin ());
    		liste.add (new Machin ());
    		liste.add (new Machin ());
    		
    		Liste<Machin>.Curseur curseur = liste.getCurseur ();
     
    		for (Machin machin = curseur.getPremier ();machin != null; machin = curseur.getSuivant ())
    			machin.fait_un_truc ();
    		}
    et la ca passe

    getPremier() et getSuivant() me renvoient bien un Machin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment utiliser les listes génériques ?
    Par nicoletflo dans le forum C#
    Réponses: 8
    Dernier message: 09/04/2008, 14h34
  2. yield return et liste générique ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 4
    Dernier message: 18/07/2007, 13h16
  3. Sélection d'un champ d'une liste générique ?
    Par chuiben dans le forum Ada
    Réponses: 2
    Dernier message: 22/03/2007, 14h36
  4. déplacer le curseur dans liste déroulante
    Par christian ler dans le forum Access
    Réponses: 2
    Dernier message: 08/01/2007, 09h51
  5. Réponses: 12
    Dernier message: 23/09/2006, 12h12

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