-2

我有一个Student包含以下实例变量的类:

int code;
String surname, firstname, major;

main方法中(在第二个类中),我创建了Student对象,并将它们添加到Vector. 在包含该main方法的类中,我定义了两个附加方法:

public static boolean search(List list, int code)
public static void display(List list)

我现在想创建另一个方法(Student getStudent(int code)),它将Student根据作为参数传递的代码返回一个对象。

我不明白的是,我们被要求不要像其他两个那样将其设为静态方法。此外,我无法搜索Student给定的代码,因为我没有在main方法中创建的列表作为参数!

我需要一些指导。

以下是我的一些代码片段:

public class Etudiant {


int code;
String nom, prenom, filiere;

Etudiant() { 
    this.code = 0;
    this.nom = "";
    this.prenom = "";
    this.filiere = "";  }

Etudiant(int code, String nom, String prenom, String filiere){
    this.code = code;
    this.nom = nom;
    this.prenom = prenom;
    this.filiere = filiere; }

public String toString(){   return code + "; " + nom + "; " + prenom + "; " + filiere +  "\n";  }   

public int getCode() {  return code;    }

public String getFiliere() {    return filiere; }

public void setCode(int code) { this.code = code;   }

public void setNom(String nom) {    this.nom = nom; }

public void setPrenom(String prenom) {  this.prenom = prenom;   }

public void setFiliere(String filiere) {    this.filiere = filiere; }
}

以下是 Main 方法的一些片段

public class TestListe { 

public static void main(String[] args){

    ArrayList <Etudiant> liste = new ArrayList <Etudiant> ();


    Etudiant e1 = new Etudiant(326, "Fouhami", "Aimen", "LOGISTIQUE");
    Etudiant e2 = new Etudiant(258, "Ait Taleb", "Souad", "INFORMATIQUE");
    Etudiant e3 = new Etudiant(789, "Elouardi", "Nadia", "ENERGIES RENOUVLABLES");
    Etudiant e4 = new Etudiant(25, "MEKKAOUI", "Oumaima", "IBPM");  

    liste.add(e1);
    liste.add(e2);
    liste.add(e3);
    liste.add(e4);  

}

// AFFICHAGE DE LA LISTE DES ETUDIANTS
public static void affichage(List <Etudiant> liste){`

            for(int i = 0; i<liste.size(); i++){
                System.out.print(liste.get(i));
            }

        }
// RECHERCHE D'UN ETUDIANT PAR LE CODE
public static boolean recherche(List liste, int code){
            int i = 0;
            Etudiant e;

            do{
                e = (Etudiant) liste.get(i);
                i++;

            }   while(i<liste.size() && e.getCode() != code);


            if(e.getCode() == code) return true;

            else return false;  
        }
4

2 回答 2

1

听起来你需要另一堂课。

你有你的Student课,那太好了。但是你需要一个作为你的类StudentManager

public class StudentManager {
    List<Student> list;
    public StudentManager(List<Student> list) {
        this.list = new ArrayList<>(list); // make a defensive copy
    }
    public Student getStudent(int code) {
        for(Student s : list) {
            if(s.getCode() == code) {
                return s;
            }
        }
        return null; // or something to indicate not found
    }
}

现在在你的主要方法中,你可以这样做:

List<Student> list = ... // make the list
StudentManager man = new StudentManager(list);
Student s = man.getStudent(1234);

这样做的好处是您可能有多个列表,并且您可以根据这些列表创建多个学生管理器。例如

StudentManager engineering = new StudentManager(engineeringList);
StudentManager gradStudents = new StudentManager(gradStudentList);

Student s = getCorsika(); // that's me!!!
engineering.getStudent(s.getCode()); // finds me, because I'm an engineer
gradStudents.getStudent(s.getCode()); // doesn't find me, because I'm not a grad student
于 2013-10-27T14:45:12.310 回答
0

没错,如果您没有参考该列表,您将无法搜索该学生。这样做的唯一方法是将列表提供给方法(作为参数)。另一种方法是将列表的引用保存为每个学生的属性,当他被添加到列表中时。

如果列表(作为向量)以静态方式保存(公共静态向量 x),您可以从任何地方访问它:

public class c { public static Vector liste; }

那么你可以这样做:

Vector liste = c.liste;


法语(非常糟糕):

C'est vrai!Tu a besoin d'un reference de la liste。Il te faut d'avair ça comme un 参数。Tu peut aussi mettre un reference de la liste dans chaque etudiant。

Une autre solution, fait la comme ça:

public class c { public static Vector liste; }

Vector liste = c.liste;

于 2013-10-27T14:37:06.733 回答