0

在我的程序中,有三个班级 Student、School 和 TestStudent。我已经在学生班级中声明了学生状态,并且还有一些获取学生主题的方法,我在学校班级中创建了一个学生类型的数组列表,但是当我尝试在学校访问学生的方法时,我得到错误 newStudent type can not be resolve .这是我的代码。

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();


}

} 
4

3 回答 3

4
newStudent.getSubject();

这不是你想要的。因为你还没有studentArrayList.

您需要遍历ArrayList, 并查看哪个学生具有作为传入参数的名称。因此,只需使用for-each循环遍历您的ArrayList,并返回适当的 Student。

因此,您的方法应如下所示: -

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

请注意,正如@Peter 在他的回答中所解释的那样,在此处使用Map会是一个更好的主意。

于 2013-01-06T10:21:42.790 回答
2

如果您想按姓名查找学生,我会将学生的姓名设为不可变并使用 aMap<String, Student>代替。这将允许你写

 Student student = map.get(studentName);

使用列表,您必须按照 Rohit 的建议搜索每个条目。注意:一个列表可以有多个同名的学生(就像在现实生活中一样)。

于 2013-01-06T10:23:46.403 回答
1

newStudent是 中的局部变量addStudent(),因此您无法从 中访问它showSubject()

我不知道您访问该主题的逻辑应该是什么,但是,例如,可以通过students.get(0).getSubject()[如果列表不为空]访问它

于 2013-01-06T10:21:24.000 回答