2013-01-06 61 views
0

在我的程序中有三個類Student,School和TestStudent。我已經宣佈了學生在學生課內部的狀態,也有獲得學生主題的方法,我已經在學校課程中創建了一個類型爲student的數組列表,但是當我嘗試在學校訪問學生的方法時,我得到錯誤newStudent類型無法解析這裏是我的代碼。如何使用數組列表來訪問java中的訪問列表類型對象的方法

public class Student { 
     String name; 
    String subject; 
    int age; 
    Student(String name,String subject,int age){ 
    this.name = name; 
    this.subject = subject; 
    this.age = age; 
} 
public void setName(String name){ 
    this.name = name; 
} 
public String getName(){ 
    return this.name; 
} 
public String getSubject(){ 
    return this.subject; 
} 
public int getAge(){ 
    return this.age; 
} 

} 

public class School { 
public ArrayList <Student> students = new ArrayList <Student>(); 
public void addStudent(String name,String subject,int age){ 
    Student newStudent = new Student(name,subject,age); 
    students.add(newStudent); 
} 
public void showSubject(String student){ 
    newStudent.getSubject(); 


} 

} 
+0

使用rohit的建議更改了代碼。現在工作。 –

回答

4
newStudent.getSubject(); 

這是不是你想。因爲您尚未從ArrayList檢索到student

您需要遍歷ArrayList,並查看哪個學生的名稱已傳入參數中。 因此,只需使用for-each循環遍歷您的ArrayList,然後返回相應的Student。

所以,你的方法應該是這樣的: -

public void showSubject(String student){ 
    for (Student student: students) { 
     if (student.getName().equals(student)) { 
      System.out.println(student.getSubject()); 
     } 
    } 
} 

注意,使用Map這裏將是his answer由@Peter解釋一個更好的主意。

1

newStudentaddStudent()一個局部變量,因此你不能從showSubject()訪問它。

我不知道應該是你的訪問對象的邏輯,但是,例如,它可以通過students.get(0).getSubject()訪問[提供的列表不是空]

2

如果你想通過名字查找學生,我會讓學生的名字不可改變,並改用Map<String, Student>。這將允許你寫

Student student = map.get(studentName); 

使用列表,你將不得不通過每個條目搜索作爲羅希特建議。注意:可能有多個同名的學生(如現實生活中)與一個列表。

+0

嗯。你爲什麼明確指定了學生'不可變'的名字?由於它是一個'String',它是隱含的。 –

+0

'學生的名字;'應該是最終的,所以它可以安全地用作關鍵。 –

+0

@彼得..啊!對。我採取了錯誤的方式。 –

相關問題