这是我无法弄清楚的实验室的一部分......我无法弄清楚名册课程中的addGrade方法有什么问题,我必须为学生添加成绩,如果学生不存在,请创建一个新学生,然后添加成绩。请注意,最初,这个类没有实例变量Student stu,我在试图让事情发挥作用时添加了它。
为学生提供构造函数,学生分数保存在链接列表中。我只在这里放了一部分代码......它有方法来获取学生姓名,获得分数,增加分数,并获得平均分数。
我的代码在经过一些编辑后不再有效...当它部分工作时,它只是用最新的代码覆盖了以前的学生。学生a加入5年级,然后学生b加7,然后学生a再加10。这应该是学生a在链表中有2个条目(5,10)。当我运行我的代码时,它只有10岁的学生,但也没有完全工作。
public class Student {
private String name;
private List scores = new LinkedList<>();
public Student(String name)
{
this.name = name;
}
public void addGrade(int score)
{
scores.add(score);
}
public class Roster {
String name;
int score;
Student stu;
//Adds a grade to the end of a list of grades for the named student.
//Should work even if no student with this name has ever been seen before.
public void addGrade(String name, int score) {
Student temp = new Student(name);
stu.addGrade(score);
}
//Gets the specified grade from the named student's scores.
public int getGrade(String name, int index) {
int a = stu.getScore(index);
return a;
}
//Gets the average for the named student.
public double getAverage(String name) {
return stu.getAverage();
}
}
答案 0 :(得分:1)
名单是学生名单。
学生有一个分数列表。
这不是您需要的所有代码,只是您的Roster类和addGrade()
方法的一部分:
public class Roster {
List<Students> students = new LinkedList<Student>();
public void addGrade(String name, int score) {
// Student s = null;
// Search for existing student.
for (Student currentStu : students) {
if (currentStu.name.equals(name) {
s = currentStu;
}
}
if (s == null) {
//Student not in our roster. Add him.
s = new Student(name);
}
// Add the score to that student.
s.addGrade(score);
}
}
答案 1 :(得分:0)
这段代码已经发生了很多事情,但我会给你一些关于可能出错的指示。我强烈建议你联系你的老师,导师或助教来关闭一些事情,但在大多数情况下,这是我看到的一些概念错误。
学生是最基本的信息。名册中包含一系列学生。您可能希望在您的名册类中使用List<Student>
。你不需要除名册之外的任何其他领域。
您应该提供一种方法来为特定学生添加更多分数,但这个特殊方面我将留给您与您的老师讨论。
您当前的链接列表分数声明是无类型的。这是不受欢迎的,因为您将在编译时生成未经检查的警告,如果您不小心在该链接列表中添加了非数字,那么在尝试对其进行数学运算时,您将在运行时收到错误。
使用链表而不是数组支持列表也很有趣,因为您打算索引到列表中。出于性能原因,我建议使用ArrayList
。
如上所述,您可以将其键入List<Integer> scores = new ArrayList<>()
。
您需要一种方法来按名称搜索学生。这有点棘手,因为你在那里存储了Student
个条目,但是可以做到。我将描述一种非常基本的方法,但我希望你从那里接受它:
答案 2 :(得分:0)
Map<String,Student>
是关键所在:
public class Roster {
private final Map<String, Student> students = new HashMap<>();
//Adds a grade to the end of a list of grades for the named student.
//Should work even if no student with this name has ever been seen before.
public void addGrade(String name, int score) {
Student stu = students.get(name);
if (stu == null) {
stu = new Student(name);
students.put(name, stu);
}
stu.addGrade(score);
}
//Gets the specified grade from the named student's scores.
public int getGrade(String name, int index) {
Student student = students.get(name);
if (student == null) {
throw new IllegalStateException("Student not found: " + name);
}
return student.getScore(index);
}
//Gets the average for the named student.
public double getAverage(String name) {
Student student = students.get(name);
if (student == null) {
throw new IllegalStateException("Student not found: " + name);
}
return student.getAverage();
}
}