在我的课程中有三个班级学生,学校和TestStudent。我已经宣布学生在学生班级内陈述,并且还有获得学生课程的方法,我已经在学校班级创建了一个类型学生的数组列表,但是当我尝试在学校中访问学生的方法时我得到错误newStudent类型无法解决这是我的代码。
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 :(得分:4)
newStudent.getSubject();
这不是你想要的。因为您尚未从student
检索到ArrayList
。
您需要遍历ArrayList
,并查看哪个学生的名称已在参数中传递。
因此,只需使用for-each
循环迭代ArrayList
,然后返回相应的学生。
因此,您的方法应如下所示: -
public void showSubject(String student){
for (Student student: students) {
if (student.getName().equals(student)) {
System.out.println(student.getSubject());
}
}
}
请注意,使用Map
这是一个更好的主意,正如his answer中@Peter所解释的那样。
答案 1 :(得分:2)
如果您想按姓名查找学生,我会将学生的姓名变为不可变,并使用Map<String, Student>
代替。这将允许你写
Student student = map.get(studentName);
使用列表,您必须按照Rohit的建议搜索每个条目。注意:可以让多个学生使用相同的名称(如在现实生活中)和一个列表。
答案 2 :(得分:1)
newStudent
是addStudent()
中的本地变量,因此您无法从showSubject()
访问它。
我不知道您访问该主题的逻辑是什么,但是,例如,可以通过students.get(0).getSubject()
访问[如果列表不为空]