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 :

Listes chainées en Java


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Listes chainées en Java
    Bonjour,

    Je suis en train d'élaborer une liste chainée en Java et j'ai un problème quand je veux afficher le contenu de la liste, par exemple 2 éléments, avec deux informations (El1-INF1) et (El2-INF2).
    Ca m'affiche deux éléments mais avec l'information du dernier comme suit : (El1-INF2) et (El2-INF2).

    Je ne sais pas où est le problème.

    Voici mon code :
    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
    import java.util.Scanner;
     
    public class Enseignant {
    public static String NomEn;
    public static String PrenomEn;
    public static String idEnseign;
    public Enseignant Next;
     
        Enseignant(String Nom,String Prenom ,String idEn,Enseignant Enlist){
            this.idEnseign = idEn;
            this.NomEn = Nom;
            this.PrenomEn = Prenom;
            this.Next = Enlist;
        }
        public Enseignant AddEns(String Nom,String Prenom ,String idEn,Enseignant Enlist){
            return new Enseignant(NomEn, PrenomEn,idEnseign,Enlist);
        }
     
        public static void main(String[] args) {
        String Nom;
            String Prenom;
            String idEnsei;
            Scanner SC = new Scanner(System.in);
            Enseignant En = null;
            String rep = " ";
            do{
                System.out.print("Name : ");Nom = SC.next();
                System.out.print("Prenom : ");Prenom = SC.next();
                System.out.print("IdEns : ");idEnsei = SC.next();
                En = new Enseignant(Nom,Prenom ,Niveau ,idEnsei , En);
                En.AddEns(Nom, Prenom, idEnsei, En);
                rep = SC.next();
                System.out.println("rep "+rep);
            }while(rep.compareTo("n")==1);
     
            System.out.println("liste des Enseignants:\n");
            //Enseignant EN = En;
            while (En != null){
                System.out.print("Id : "+En.idEnseign+"\nNom : "+En.NomEn+"\nPrénom : "+En.PrenomEn\n");
                En = En.Next;
            }
        }
    }
    Merci d'avance pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 191
    Points
    191
    Par défaut
    Citation Envoyé par CostaInf Voir le message

    Quelqu'un saurait-il m'expliquer d'où peut venir le problème ?
    Oui, moi m'sieur, j'ai un début d'idée !


    Ton algo couille !
    Citation Envoyé par CostaInf Voir le message
    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
    import java.util.Scanner;
    
    public class Enseignant {
    public static String NomEn;
    public static String PrenomEn;
    public static String idEnseign;
    public Enseignant Next;
    
        Enseignant(String Nom,String Prenom ,String idEn,Enseignant Enlist){
            this.idEnseign = idEn;
            this.NomEn = Nom;
            this.PrenomEn = Prenom;
            this.Next = Enlist;
        }
        public Enseignant AddEns(String Nom,String Prenom ,String idEn,Enseignant Enlist){
            return new Enseignant(NomEn, PrenomEn,idEnseign,Enlist);
        }
    
        public static void main(String[] args) {
        String Nom;
            String Prenom;
            String idEnsei;
            Scanner SC = new Scanner(System.in);
            Enseignant En = null;
            String rep = " ";
            do{
                System.out.print("Name : ");Nom = SC.next();
                System.out.print("Prenom : ");Prenom = SC.next();
                System.out.print("IdEns : ");idEnsei = SC.next();
    
                // ICI tu créés un nouvel enseignant que tu ajoutes en début de liste. C'est bien ! Appelons-le E1
                En = new Enseignant(Nom,Prenom ,Niveau ,idEnsei , En);
    
                //ICI je sais pas trop ce que tu fais... tu recréés un objet qui pointe sur E1 et tu ne te sers pas de ce nouvel enseignant (tu m'étonne).
                En.AddEns(Nom, Prenom, idEnsei, En);
                rep = SC.next();
                System.out.println("rep "+rep);
            }while(rep.compareTo("n")==1);
    
            System.out.println("liste des Enseignants:\n");
            //Enseignant EN = En;
            while (En != null){
                System.out.print("Id : "+En.idEnseign+"\nNom : "+En.NomEn+"\nPrénom : "+En.PrenomEn\n");
                En = En.Next;
            }
        }
    }
    Du coup soit tu fais En= new Enseignant (...)
    soit tu fais En = AddEns (...)

    Mais ne fais pas les deux ! Et si tu te sers de AddEns, récupère la valeur de retour elle est là pour ça ^^.
    Et mieux encore, supprime la méthode AddEns ou fais en sorte qu'elle porte bien son nom... typiquement elle prendrai en argument un Enseignant E et ferait simplement this.next = E... m'enfin celui du constructeur suffit.

    Cela dit, ça n'explique pas pourquoi t'as deux fois la même information mais c'est déjà un début de nettoyage bien nécessaire.
    On apprend plus en répondant aux questions qu'en les posant.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Listes chainées en Java
    Bonjour,
    je vous remercie tout d'abord. ta raison pour la suppression inutile de quelques instructions!
    j'ai ressayer de le développer à l'aide d'un autre Collègue dans une autre forum comme suit :
    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
    import java.util.Scanner;
     
    public class Enseignant {
     
    	private String nom;
    	private String prenom;
    	private String id;
    	private Enseignant next;
     
    	public Enseignant(String nom, String prenom, String id, Enseignant next) {
     
    		this.id = id;
    		this.nom = nom;
    		this.prenom = prenom;
    		this.next = next;
     
    	}
     
    	public String toString() {
    		return "Id : " + id + "\nNom : " + nom + "\nPrénom : " + prenom;
    	}
     
    	public static void main(String[] args) {
     
    		String nom;
    		String prenom;
    		String id;
    		Scanner scanner = new Scanner(System.in);
    		Enseignant enseignant = null;
    		String reponse;
     
    		do {
     
    			System.out.print("Nom : ");
    			nom = scanner.next();
    			System.out.print("Prénom : ");
    			prenom = scanner.next();
    			System.out.print("Id : ");
    			id = scanner.next();
    			enseignant = new Enseignant(nom, prenom, id, enseignant);
    			System.out.println("Ajouter un autre enseignant ? o/n");
    			reponse = scanner.next();
     
    		} while (reponse.equalsIgnoreCase("o"));
     
    		System.out.println("liste des enseignants :\n");
     
    		while (enseignant != null) {
     
    			System.out.println(enseignant);
    			enseignant = enseignant.next;
     
    		}
     
    	}
     
    }
    et il çà marche ! sauf qu'il affiche le contenu des éléments de la liste inversement !

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 191
    Points
    191
    Par défaut
    Citation Envoyé par CostaInf Voir le message
    Bonjour,
    je vous remercie tout d'abord. ta raison pour la suppression inutile de quelques instructions!
    Euh, on remet les mots dans l'ordre, ce sont les instructions qui sont inutiles, pas leur suppression .

    Concernant l'ordre inverse, c'est normal, c'est toi qui as choisi de les ordonner dans l'ordre inverse.
    Tu créé le premier enseignant E1 (avec next = null). Quand tu créés E2 tu lui fourni E1 comme argument donc on a E2.Next=E1. Et ainsi de suite, tu places à chaque fois le dernier enseignant créé en tête de liste donc lors de l'affichage ça commence bien par le dernier créé.

    Donc tu l'auras compris, si tu veux que l'affichage se fasse par ordre de création il faut que E1.Next = E2 et pas l'inverse (en faisant gaffe aux "null" au début).
    On apprend plus en répondant aux questions qu'en les posant.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Salut a tous le monde, j'ai essayer de faire un petit code java, (je suis débutant) pour manipuler des ressources (Enseignants et Enseignement) la première classe Enseignant (j'ai travailler avec ArrayList) comme suit:
    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
    import java.util.ArrayList;
    public class Enseignant {
    	private  String NomEn;
    	private  String NiveauEn;
    	private  String idEnseign;
     
     
    public Enseignant(String idEn,String Nom , String Niveau ){
    	// TODO Auto-generated constructor stub
    	this.idEnseign = idEn;
    	this.NomEn = Nom;
    	this.NiveauEn = Niveau;
    }
     
    public void setNom(String nom) {
    	this.NomEn = nom;
    }
    public String getNom() {
    	return NomEn;
    }
     
    public void setId(String Id) {
    	this.idEnseign = Id;
    }
    public String getId() {
    	return idEnseign;
    }
     
    public void setNiveau(String Niveau) {
    	this.NiveauEn = Niveau;
    }
    public String getNiveau() {
    	return NiveauEn;
    }
     
    public String toString() {
    	return "Enseignant [ Id : " + idEnseign+" Nom : " + NomEn + " Prénom : " + PrenomEn + " Niveau : "+NiveauEn+"]\n";
    }
    et la classe Enseignement aussi comme celle là! ArrayList, en changeant que les attributs (IntituleModule, Unite çàd(le module est appartient à une unité fondamentale ou secondaire)
    et le problème qui se pose, je veux connaitre si je peux élaborer une List des Lists(ArrayList d'ArrayList): dans la classe ressources j'ai développer cette méthode qui permet d'ajouter une ressources(Enseignant ou bien Enseignement) :
    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 static void AddRess(String D,ArrayList<Enseignant> E,ArrayList<Enseignement> EM){
     
    		 final Ressources RSS = new Ressources(E,EM); 
    		R.add(RSS);
    	}
    public static void main(String[] args) {
    		// TODO Auto-generated method stu
     
                    ArrayList<Enseignant> E = new ArrayList<Enseignant>();
                    ArrayList<Enseignement> Em = new ArrayList<Enseignement>();  
    		ArrayList<Ressources> R = new ArrayList<Ressources>();
     
    		AddRess(DEP,ENS, ENSM);
     
    		System.out.println("Ressources!");
    		System.out.print(R);
    quelqu'un me donner un un coup de main! S.V.P , et merci tout d'abord !

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Attention,
    ArrayList<Ressources> R = new ArrayList<Ressources>();

    AddRess(DEP,ENS, ENSM);

    System.out.println("Ressources!");
    System.out.print(R);
    J'imagine bien que tu as une propriété "R" dans la classe. Quand tu fais le System.out.print(R), ce sera le toString() de l'objet R dans la méthode main qui sera appelé mais pas celui de la propriété de la classe. Et dans la méthode AddRess, c'est l'objet R de la propriété de la classe que sera ajouté.
    je veux connaitre si je peux élaborer une List des Lists(ArrayList d'ArrayList)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List list<ArrayList <NomClasse> >;
    A+.

  7. #7
    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
    autre question: pourquoi avoir un " public setID", l'identifiant de l'enseignant est susceptible de changer?
    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)

Discussions similaires

  1. liste chaine en java ?!
    Par lenetfm dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 14/04/2008, 16h32
  2. liste chainée en java
    Par tooooo dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 18/03/2008, 10h36
  3. Liste chainées JAVA
    Par badmix dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 04/01/2007, 15h24
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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