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 :

Problème d'affichage d'un tableau d'étudiants (POO)


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2017
    Messages : 12
    Par défaut Problème d'affichage d'un tableau d'étudiants (POO)
    Bonjour a tous !!

    Je début de la programmation orienté objets actuellement sous Java, et rencontre un problème illogique d'affichage... J’explique mon programme:

    => Le but de ce petit programme est la gestion des étudiants : (tout ce qu'il y a de plus simple!).
    - J'utilise 2 classes : Etudiant et Filiere.
    - Une classe programme (main) appelé Programme.
    - Au niveau de chaque classe on trouve les définitions des attributs, constructeurs, accesseurs & modificateurs, et la
    méthode toString() pour l'affichage.
    - La gestion des étudiants est éffectuée au niveau de la classe Filiere, on note donc l'ajout des différents méthodes de mise à
    jour (dont la méthode afficherEtudiant() qui me pose problème!).

    => Voici le code des différentes classes:
    - Etudiant:
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    import java.time.LocalDate;
     
    public class Etudiant 
    {
    	// Attributs :
    	private int idEtudiant;
    	private String nom;
    	private String prenom;
    	private LocalDate dateNaissance;
    	private double moyenne;
     
    	// Constructeurs:
    	public Etudiant() 
    	{
     
    	}
     
    	public Etudiant(int idEtudiant, String nom, String prenom, LocalDate dateNaissance, double moyenne) 
    	{
    		this.idEtudiant = idEtudiant;
    		this.nom = nom;
    		this.prenom = prenom;
    		this.dateNaissance = dateNaissance;
    		this.moyenne = moyenne;
    	}
     
    	// Accesseurs & modificateurs:
    	public int getIdEtudiant() 
    	{
    		return idEtudiant;
    	}
     
    	public void setIdEtudiant(int idEtudiant) 
    	{
    		this.idEtudiant = idEtudiant;
    	}
     
    	public String getNom() 
    	{
    		return nom;
    	}
     
    	public void setNom(String nom) 
    	{
    		this.nom = nom;
    	}
     
    	public String getPrenom() 
    	{
    		return prenom;
    	}
     
    	public void setPrenom(String prenom) 
    	{
    		this.prenom = prenom;
    	}
     
    	public LocalDate getDateNaissance() 
    	{
    		return dateNaissance;
    	}
     
    	public void setDateNaissance(LocalDate dateNaissance) 
    	{
    		this.dateNaissance = dateNaissance;
    	}
     
    	public double getMoyenne() 
    	{
    		return moyenne;
    	}
     
    	public void setMoyenne(double moyenne) 
    	{
    		this.moyenne = moyenne;
    	}
     
    	// Méthodes:
    	@Override
    	public String toString() 
    	{
    		return "Etudiant [idEtudiant=" + idEtudiant + ", nom=" + nom + ", prenom=" + prenom + ", dateNaissance="
    				+ dateNaissance + ", moyenne=" + moyenne + "]";
    	}
    	public void afficherEd()
    	{
    		System.out.println(this.toString());
    	}
    }
    * Filiere:
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    import java.util.Arrays;
     
    public class Filiere 
    {
    	// Variables:
    	//int nbrEtudiant;
     
    	// Attributs:
    	private int codeFiliere;
    	private String intitule;
    	private int nbrModules;
    	private int nbrEtudiant;
    	public Etudiant[] etudiants;
     
    	// Constructeurs:
    	public Filiere() 
    	{
    		this.nbrEtudiant = 0;
    		etudiants = new Etudiant[30];
    	}
     
    	public Filiere(int codeFiliere, String intitule, int nbrModules, int nbrEtudiant, Etudiant[] etudiants) 
    	{
    		this.codeFiliere = codeFiliere;
    		this.intitule = intitule;
    		this.nbrModules = nbrModules;
    		this.nbrEtudiant = nbrEtudiant;
    		this.etudiants = etudiants;
    	}
     
    	// Accésseurs modificateurs:
    	public int getCodeFiliere() 
    	{
    		return codeFiliere;
    	}
     
    	public void setCodeFiliere(int codeFiliere) 
    	{
    		this.codeFiliere = codeFiliere;
    	}
     
    	public String getIntitule() 
    	{
    		return intitule;
    	}
     
    	public void setIntitule(String intitule) 
    	{
    		this.intitule = intitule;
    	}
     
    	public int getNbrModules() 
    	{
    		return nbrModules;
    	}
     
    	public void setNbrModules(int nbrModules) 
    	{
    		this.nbrModules = nbrModules;
    	}
     
    	public int getNbrEtudiant() {
    		return nbrEtudiant;
    	}
     
    	public void setNbrEtudiant(int nbrEtudiant) {
    		this.nbrEtudiant = nbrEtudiant;
    	}
     
    	// Méthodes :
    	@Override
    	public String toString() 
    	{
    		return "Filiere [codeFiliere=" + codeFiliere + ", intitule=" + intitule + ", nbrModules=" + nbrModules
    				+ ", etudiants=" + Arrays.toString(etudiants) + "]";/**/
    	}
    	public void afficherFiliere()
    	{
    		System.out.print(this.toString());
    	}
     
    	public void ajouterEtudiant(Etudiant ed)
    	{
    		this.etudiants[nbrEtudiant] = ed;
    		this.nbrEtudiant++;
    	}
     
    	public void afficherEtudiant()
    	{
    		for(int i=0; i<this.nbrEtudiant; i++)
    		{
    			this.etudiants[i].afficherEd();
    		}
    	}
    }
    * Programme:
    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
    66
    67
    68
    import java.util.Scanner;
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
     
    public class Programme 
    {
     
    	public static void main(String[] args) 
    	{
    		Filiere f1 = new Filiere();
    		Etudiant e1 = new Etudiant();
    		Scanner sc = new Scanner(System.in);
     
    		int choix;
    		char continu = 'o';
    		String strNaissance;
     
    		while(continu=='o' || continu=='O')
    		{
    			System.out.println("\n1- Ajouter étudiant.");
    			System.out.println("2- Afficher le étudiants.");
    			System.out.print("\t => Votre choix: ");
    			choix = sc.nextInt();
     
    			switch(choix)
    			{
    				case 1:
    				{
    					System.out.print("Donnez l'identifiant de l'étudiant: ");
    					e1.setIdEtudiant(sc.nextInt());
    					System.out.print("Donnez le nom de l'étudiant: ");
    					sc.nextLine();
    					e1.setNom(sc.nextLine());
    					System.out.print("Donnez le prénom de l'étudiant: ");
    					e1.setPrenom(sc.nextLine());
     
     
    					System.out.print("Donnez la date de naissance de l'étudiant: ");
    					strNaissance = sc.next();
    				    e1.setDateNaissance(LocalDate.parse(strNaissance,DateTimeFormatter.ofPattern("dd/MM/yyyy")));
     
    					System.out.print("Donnez la moyenne de l'étudiant: ");
    					e1.setMoyenne(sc.nextDouble());
     
    					f1.ajouterEtudiant(e1);
     
    					System.out.print("\n\t=> Etudiant bien ajouté !");
     
    					break;
    				}
    				case 2:
    				{
    				    f1.afficherEtudiant();
    					break;
    				}
    				default:
    				{
    					System.out.print("\n\t => Ce choix n'est pas prévut!");
    				}
    			}
    			System.out.print("\n - Retourner au menu ? oui(o)/non: ");
    			sc.nextLine();
    			String strContinu = sc.nextLine();
    			continu = strContinu.charAt(0);
    		}
    	}
     
    }
    => Au niveau de l’exécution l'ajout d'un nouveau étudiant passe visiblement bien! mais coté affichage, ça affiche le dernier
    étudiant se répétant plusieurs fois !!! y a t'il une erreur au niveau de la méthode afficherEtudiant() de Filiere. ou ai-je
    négliger quelque chose en manipulant le tableau d'étudiants ?

    - Voici mon problème d’exécution:

    1- Ajouter étudiant.
    2- Afficher le étudiants.
    => Votre choix: 1
    Donnez l'identifiant de l'étudiant: 10
    Donnez le nom de l'étudiant: aaa
    Donnez le prénom de l'étudiant: qqq
    Donnez la date de naissance de l'étudiant: 12/02/1993
    Donnez la moyenne de l'étudiant: 13

    => Etudiant bien ajouté !
    - Retourner au menu ? oui(o)/non: o

    1- Ajouter étudiant.
    2- Afficher le étudiants.
    => Votre choix: 1
    Donnez l'identifiant de l'étudiant: 20
    Donnez le nom de l'étudiant: xxx
    Donnez le prénom de l'étudiant: fff
    Donnez la date de naissance de l'étudiant: 20/04/1992
    Donnez la moyenne de l'étudiant: 14

    => Etudiant bien ajouté !
    - Retourner au menu ? oui(o)/non: o

    1- Ajouter étudiant.
    2- Afficher le étudiants.
    => Votre choix: 2

    =>Etudiant :0:
    - Indentifiant: 20
    =>Etudiant :1:
    - Indentifiant: 20
    - Retourner au menu ? oui(o)/non:

    Merci d'avance pour votre aide !!

  2. #2
    Membre averti
    Avatar de daohamadou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 8
    Par défaut proposition
    J'ai lu ton code. je ne vois pas d'erreur. mais je te conseil d'utilise les arrayList. ici, la taille de ton tableau est fixe. Tu ne peux pas ajouter plus de 30 etudiants.
    Montre moi ton probleme

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ce genre de souci, lorsqu'on a (on on croit avoir) plusieurs "objets", dans une collection, une liste, un tableau..., mais que ça n'affiche que les valeurs du "dernier" ajouté, répétées, provient de 2 causes possibles :

    1. les attributs sont statiques
      donc quand on modifie la valeur d'un attribut d'un objet, tous les autres objets de la même classe ayant le même attribut, il change aussi pour les "autres"
    2. le recyclage d'instance : on utilise qu'une seule instance d'objet, qu'on créé au début et on affecte les attributs de cette instance qu'on ajoute à la liste à chaque tour de la boucle de remplissage. On se retrouve donc avec une liste qui contient plusieurs fois le même objet, donc forcément l'affichage affiche toujours le même plusieurs fois, et le dernier forcément, puisque c'est le dernier pour lequel on a affecté les valeurs.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      Etudiant etudiant = new Etudiant();
       
      while ( condition ) {
         etudiant.setMachinTruc( ... );
       
         liste.add(etudiant);
       
      }
      versus
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
       
       
      while ( condition ) {
       
         Etudiant etudiant = new Etudiant();
       
         etudiant.setMachinTruc( ... );
       
         liste.add(etudiant);
       
      }
      Dans la première version, on utilise la même instance d'objet, qu'on modifie à chaque tour de boucle : on se retrouve donc avec n fois le même objet qui a les valeurs affectées dans le dernier tour de boucle.
      Dans la seconde version, on créé une nouvelle instance à chaque tour de boucle, chaque instance ayant les valeurs affectées dans le tour de boucle qui l'a créée.


    Tu n'as pas d'attribut static, je te laisse déduire donc quel est ton problème.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2017
    Messages : 12
    Par défaut
    Merci beaucoup pour ta réponse joel.drigo !!

    J'ai effectivement récupérer mes attributs via les getters & setters, donc pas de static et du coup je crois que c'est le cas n°2 dont j'avais affaire !!
    Je vais donc essayer d'instancier à chaque fois mon objet Etudiant avant l'ajout et voir ci ça marche

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2017
    Messages : 12
    Par défaut
    Ça marche nickel ! Encore merci pour le coup de pouce

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

Discussions similaires

  1. Problème d'affichage d'un tableau DataGridView
    Par Foolmoon dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/04/2008, 15h00
  2. [SQL] Problème d'affichage de données (tableau html)
    Par Flynt dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/02/2008, 11h04
  3. [MySQL] Problème d'affichage dans un tableau au niveau des accents
    Par Stu76 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/02/2008, 16h34
  4. Problème d'affichage dans un tableau
    Par claralavraie dans le forum ASP
    Réponses: 13
    Dernier message: 21/12/2005, 15h45
  5. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00

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