我有两个课程LabClass
和Student
,学生在课堂上注册并获得成绩。
我使用以下内容将Student
称为LabClass
作为ArrayList:
private List<Student> students;
现在,我希望能够在每个学生注册后单独为每个学生分配成绩。
我已经在Student
课程中创建了一个方法来分配成绩,并试图在LabClass
中调用它,但它没有成功。
Student
中的代码如下:
public void grade(int marks){
grades = marks;
}
我尝试使用以下代码在LabClass
内调用它:
public void giveGrades(){
for(Student student : students){
student.grade(int marks);
}
}
但是我得到了错误&#34; .class expect&#34;。我的代码出了什么问题?
我是否应该使用数组的set
命令来更改元素的值?如果是这样,我应该如何编写它以便它可以从参数中获取外部值?另外,如何指定要更改元素的哪个值?
答案 0 :(得分:1)
首先让我们澄清一些概念。正如其他提到的,这段代码:
public void giveGrades(){
for(Student student : students){
student.grade(int marks);
}
}
不起作用,因为当您使用某种方法时(参数在声明时),您不能设置参数的类型。所以第一个&#34;修复&#34;这将是:
public void giveGrades(){
for(Student student : students){
student.grade(marks);
}
}
现在的问题是:什么是商标?它没有在任何地方定义。让我们假设我们确实定义了它并且它的值是3.前面的代码为所有学生分配3作为等级。即使&#34;标记&#34;这也不太现实。是一个我们以某种方式作为参数接收的int。我们可能想要每个学生的成绩,这意味着我们需要一个列表。因此,我们想要一个参数,其中包含我们要分配给学生的成绩列表:ArrayList<Integer>
成绩(如果需要,您可以稍后将其更改为Double,但想法是相同的)。在这种情况下,我们需要遍历学生列表中的每个元素,并从列表成绩中分配一个元素。像这样:
您有一份学生列表students: <s1, s2, s3, s4>
您有成绩列表grades: <g1, g2, g3, g4>
您需要从列表中为每个学生分配一个成绩:s1.grade(g1), s2.grade(g2), s3.grade(g3), s4.grade(g4)
我们可以用for来实现,但允许我们对两个列表进行迭代。一种可能的方式(有更多软化的方式):
public void giveGrades(ArrayList<Integer> grades){
for(int i = 0; i < students.size(); i++){
students.get(i).grade(grades.get(i))
}
}
从Java的角度来看。现在,根据您的评论,您需要一个外部参数,并提到bluej的使用。在问题How do I enter parameters for an ArrayList in BlueJ?中,您可以更好地了解如何将参数传递给方法。