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 :

Liste Chainée : perte de la donnée précédente


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 139
    Points : 459
    Points
    459
    Par défaut Liste Chainée : perte de la donnée précédente
    Bonjour à tous,

    J'ai un projet en java à réaliser dans le cadre scolaire.

    Le principe est de faire un traducteur français <=> morse. Histoire de rajouter du challenge inutile, on doit utiliser une liste chainée qu'on doit coder à la main. (Parce que voilà, c'est comme ça.)

    La liste fonctionne et répond aux critères demandés. J'essaye donc d'initialiser la liste complète avec les 2alphabets, mais au final quand je récupère la liste, je me retrouve sur le chainon final au lieu d'être sur le premier.

    La liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private String[] maillon;
    private Liste next;
    (maillon est un tableau de String tel que String[] maillon = {"e","."};, afin de conserver ensemble l'équivalent français et morse.

    Le code qui pose problème :
    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
    public class Traducteur
    {
    	private String[] alphaFr = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
    	private String[] alphaMorse = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
    	private Liste liste1;
     
    	public Traducteur()
    	{
    		String[] corres1 = new String[26];
    		this.liste1 = new Liste(corres1);
     
    		Liste listeNext = new Liste();
    		this.liste1.setNext(listeNext);
     
    		for(int i=1;i<26;i++)
    		{
    			corres1[0] = alphaFr[i];
    			corres1[1] = alphaMorse[i];
    			listeNext.setMaillon(corres1);
     
     
    			listeNext.setNext(new Liste());
    			listeNext = listeNext.getNext();
     
    		}
    	}
     
    	public Liste getListe()
    	{
    		return this.liste1;
    	}
     
     
    }
    A la fin, quand je fais un getListe(), je récupère juste le dernier maillon. J'ai l'impression qu'en fait il passe la référence de liste1 et travaille sur cette référence.

    Mon but serait de récupérer le premier maillon avec getListe() (donc la lettre a) et ensuite via des getNext(), je navigue dans la liste.

    (Le reste du code consiste en des méthodes constructeur de la liste et un main pour faire des tests. Rien de sorcier.)

    Merci de votre temps et aide.

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Il faudrait qu'on ai la définition de ta classe Liste pour pouvoir te dire pourquoi cela ne fonctionne pas.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    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
    Hello,

    Tu travailles toujours sur les deux premiers éléments du tableau corres1. Qui est de taille... Autre que deux ?

    Bref, ton problème principal est que tu t'es emmêlé les pinceaux. À mon avis la meilleure solution est :

    (maillon est un tableau de String tel que String[] maillon = {"e","."};, afin de conserver ensemble l'équivalent français et morse.)
    Tu me vires ça tout de suite et tu le remplaces par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private String francais; // ou éventuellement char francais si tu préfères
    private String morse;
    puis tu recommences tout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 139
    Points : 459
    Points
    459
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Hello,

    Tu travailles toujours sur les deux premiers éléments du tableau corres1. Qui est de taille... Autre que deux ?

    Bref, ton problème principal est que tu t'es emmêlé les pinceaux. À mon avis la meilleure solution est :



    Tu me vires ça tout de suite et tu le remplaces par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private String francais; // ou éventuellement char francais si tu préfères
    private String morse;
    puis tu recommences tout.
    EDIT : Effectivement c'était aussi simple que ça. Merci du conseil.

    J'en tirerais comme moral que parfois, il faut faire simple.

    Merci à vous.

  5. #5
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Tu devrais sérieusement regarder comment la liste chaînée est réalisée dans le code source de Java !

    De base une liste chainée est conceptualisé avec deux classes :


    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
     
    public class LinkedList<E>
    {
        transient int size = 0;
     
        /**
         * Pointer to first node.
         * Invariant: (first == null && last == null) ||
         *            (first.prev == null && first.item != null)
         */
        transient Node<E> first;
     
        /**
         * Pointer to last node.
         * Invariant: (first == null && last == null) ||
         *            (last.next == null && last.item != null)
         */
        transient Node<E> last;
     
        private static class Node<E> {
            E item;
            Node<E> next;
            Node<E> prev;
     
            Node(Node<E> prev, E element, Node<E> next) {
                this.item = element;
                this.next = next;
                this.prev = prev;
            }
        }
    }
    La fonction d'ajout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        /**
         * Links e as last element.
         */
        void linkLast(E e) {
            final Node<E> l = last;
            final Node<E> newNode = new Node<>(l, e, null);
            last = newNode;
            if (l == null)
                first = newNode;
            else
                l.next = newNode;
            size++;
            modCount++;
        }
    Même si tu ne reprends pas l'ensemble de l'implémentation de la LinkedList, il y a un minimum à reprendre/ comprendre.

    PS: Les source de java sont dans le dossier d'installation de ton JDK dans le src.zip. (T'es obligé de les avoir sur ton poste. C'est dans l'installation de base.)
    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 139
    Points : 459
    Points
    459
    Par défaut
    Merci du conseil mais je ne peux pas le suivre.

    Ce projet est scolaire. Déjà, franchement dit, les listes sur ce programme j'en vois pas l'utilité.
    Mais le gros soucis, c'est que le prof a donné SA définition des listes et, concrètement, il en a un peu rien à foutre que la version implémentée dans Java, dans C++ ou dans COBOL soit différente (je dis ça au pif pour les langages !).

    Donc je me contente de faire ce boulot stupide de manière stupide pour avoir une note décente. Et oui, ça me dégoute de faire du travail pareil.

    Par contre je vais quand même aller jeter un oeil à la source, pour le plaisir personnel.

    Merci encore.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/03/2010, 09h58
  2. Réponses: 3
    Dernier message: 16/07/2009, 18h00
  3. Ajouter données liste chainée
    Par twixi dans le forum VB.NET
    Réponses: 5
    Dernier message: 03/07/2008, 12h14
  4. Problème d'acces aux données d'une liste Chainée
    Par Le Payton dans le forum Langage
    Réponses: 4
    Dernier message: 27/08/2007, 11h00
  5. utiliser listes chainées où donné=structure?
    Par xlas-blader dans le forum C
    Réponses: 6
    Dernier message: 05/12/2006, 13h25

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