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

Langage Java Discussion :

Mes objets ne veulent pas se « ré-enfiler »


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Mes objets ne veulent pas se « ré-enfiler »
    Bonjour,
    Je débute en Java et j'ai besoin d'aide pour un exercice. Il est assez long et je bloque sur un truc de la fin, donc je ne mets ici que les consignes et codes utiles . L'exercice consiste à créer plusieurs classes qui a la fin permettront de « faire passer des oraux » à des étudiants, devant des enseignants. Chaque enseignant a un groupe étudiant, composé d'étudiants rangés en file et qui ont comme première matière à passer celle de l'enseignant en question.
    Mon problème se trouve au niveau du triage des étudiants. Pour vérifier si la première matière d'un étudiant correspond à la matière de l'enseignant, je défile l'étudiant avec la méthode defiler: e.defiler a pour effet de retourner e et de supprimer e de la file. Ensuite je vérifie si les matières correspondent (pour ça, pas de problème). Le truc c'est que, lorsque j'ai défilé tous les étudiants, il faut les ré-enfiler, pour pouvoir refaire la comparaison des matières avec les autres enseignants. C'est ça qui ne marche pas, le « ré-enfilement », et j'aimerais qu'on m'aide à trouver pourquoi ; j'ai essayé de deux manières : en utilisant une file temporaire (c'est-à-dire en enfilant au fur et à mesure e dans temp mais au moment de défiler temp pour enfiler les étudiants dans ma file principale , marche pas ; en ré-enfilant directement dans ma file principale, vu que e reviendrait à la fin de la file. Mais les deux méthodes n'ont pas marché.


    => Créer une classe File (First In First Out) permettant d'enfiler et de défiler des
    objects. Dans une file, le premier élément entré (enfilé) est le premier à sortir
    (défiler):

    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
    public class File{
     
    	protected int tailleOccupee;
    	private Object[] file;
     
    	public File(int taille){
    		this.file = new Object[taille];
    		tailleOccupee = 0;
    	}
     
    	public Object getDebut(){
    		return file[0];
    	}
     
    	public Object defiler(){
    		if(tailleOccupee > 0){
    			Object res = file[0];
    			tailleOccupee--;
    			Object[] temp = new Object[tailleOccupee];
    			for(int i = 0; i < tailleOccupee ; i++)
    				temp[i] = file[i+1];
    			file = temp;
    			return res;
    		}
     
    		return null;
    	}
     
     
     
     
    	public boolean enfiler(Object o){
    		if(tailleOccupee >= file.length)
    			return false;
     
    		else{
    			tailleOccupee++;
    			file[tailleOccupee-1] = o;
    			}
     
    		return true;
     
    	}
     
    	public boolean estVide(){
    		if(tailleOccupee == 0)
    			return true;
     
    		return false;
    	}
     
    	public String toString(){
    		String str = "";
    		for(int i = 0; i < tailleOccupee ; i++){
    			str += file[i] + "\n";
    		}
     
    		return str;
    	}
     
     
    }

    En gros, c'est à voir comme une queue, premier arrivé premier servi (donc premier hors de la file ).

    Ensuite :
    => Créer la classe Enseignant héritant de Personne (Personne est une classe contenant les attributs nom/prénom) :

    (Ici la méthode à regarder est affecterEtudiant)

    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
    public class Enseignant extends Personne {
     
    	private int nbMax;
    	private String domaine;
    	private File groupeEtudiants;;
     
    	public Enseignant(String domaine, int nbMax){
    		super();
    		this.domaine = domaine;
    		this.nbMax = nbMax;
    		groupeEtudiants = new File(nbMax);
     
    	}
     
    	public String getDomaine(){
    		return this.domaine;
    	}
     
    	public int getNbMax(){
    		return this.nbMax;
    	}
     
    	public File getGroupeEtudiant(){
    		return this.groupeEtudiants;
    	}
     
    	public void affecterEtudiants(File etudiants){
    		int j = etudiants.tailleOccupee;
    		for(int i = 0; i < j ; i++){
    			Etudiant et = (Etudiant)etudiants.defiler();
    			if((et.domaines.getSommet()).equals(this.domaine)){
    				groupeEtudiants.enfiler(et);
    			}
     
    		}	
     
     
    	}
     
    	public String toString(){
    		String str;
    		str = "Nom : " + this.nom + "\nPrénom : " + this.prenom + "\nDomaine : " + this.domaine + "\nGroupe étudiant :\n"
    		+ this.groupeEtudiants;
     
    		return str;
    	}
     
    	public void EtudiantFairePasser(){
    		Etudiant et = (Etudiant)groupeEtudiants.defiler();
    		et.domaines.depiler();
    	}
     
    }

    J'espère ne pas avoir été trop floue, et ne pas avoir oublié de code important (si c'est le cas n'hésitez pas à me faire signe ). Merci d'avance !

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Bonjour,

    Quand tu dis que tes deux approchent n'ont pas marché, peux-tu être plus précis:
    As-tu eu une erreur de compilation? une erreur à l'exécution? la nouvelle file était vide? ...

    Sinon, si j'ai bien compris, tu as une file d'attente que tu vas parcourir plusieurs fois. Si c'est le cas, j'ai une proposition:
    Utilise une List à la place d'un tableau pour ta file.
    Pour tes parcours, utilise un Iterator en interne : cela aura le même effet sans modifier ta liste. Tu n'auras donc plus à te soucier de reconstruire ta liste pour le passage suivant.

  3. #3
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Pour tu n'utilises pas la classe Stack de l'api Java? soit en lui déléguant la gestion de la file dans ta classe File ou en l'utilisant directement à la place de ta classe File?

    Aussi, tu devrais typer un peu tout ça.. en utilisant les génériques et ne pas utiliser Object dans ta classe File.





    Cordialement,
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Tout d'abord merci à vous deux pour vos réponses.

    Deaf, excuse moi je n'ai peut-être pas été assez claire sur le « ça ne marche pas ». C'est le ré-enfilement qui ne marchait pas, c'est-à-dire que au final la file que je voulais remplir était toujours vide (d'ailleurs la méthode enfiler(object o) renvoyait false).

    Autrement, je sais qu'il y a des classes déjà faites qui auraient pu m'aider, mais le but de l'exercice était de le faire moi -même. En effet, la consigne que j'ai donnée n'était que la principale , elle est en faite composée de a) b) qui me guidaient pas à pas (« Créer une classe File [...] avec : a) un tableau d'Objects [...] »). J'ai finalement trouvé la réponse avec l'aide d'un ami, le problème venait de tailleOccupee qu'il fallait remettre à 0 ( ce qui au final me laisse perplexe, car dans la méthode defiler() je décrémente tailleOccupee).

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

Discussions similaires

  1. mes objets n'évoluent pas comme ils le devraient
    Par warwill dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 27/09/2010, 16h31
  2. Mes objets ne sont pas persistés
    Par JulienZ dans le forum JPA
    Réponses: 1
    Dernier message: 16/08/2009, 15h47
  3. Mes Objets JLabel ne s'affiche pas correctement
    Par michel18 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 03/11/2006, 21h38
  4. Mes session ne veulent pas marcher :-/
    Par GrosB dans le forum Langage
    Réponses: 11
    Dernier message: 01/08/2006, 00h45
  5. Réponses: 5
    Dernier message: 08/12/2005, 23h40

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