我有一个非静态方法的问题

时间:2013-10-27 14:26:08

标签: java

我有一个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;  
        }

2 个答案:

答案 0 :(得分: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
    }
}

现在在您的main方法中,您可以执行此操作:

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

答案 1 :(得分:0)

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

如果列表(作为Vector)以静态方式保存(公共静态向量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çaadonun参数。 Tu peut aussi mettre un reference de la liste dans chaque etudiant。

Une autre solution,fait lacommeça:

public class c { public static Vector liste; }

Vector liste = c.liste;