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 !
Partager