【问题标题】:How do I change the value of an element in an array using external parameters?如何使用外部参数更改数组中元素的值?
【发布时间】:2018-04-15 11:40:30
【问题描述】:

我有两个班级,LabClassStudent,学生在班级注册并给出成绩。

我已使用以下方法将 Student 作为 ArrayList 调用到 LabClass

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

但我收到错误“.class expected”。我的代码有什么问题?

我应该使用数组的set 命令来更改元素的值吗?如果是这样,我应该如何编写它以便它可以从参数中获取外部值?另外,如何指定要更改元素的哪个值?

【问题讨论】:

  • 当你调用一个方法时,你不应该指定方法参数的类型。它应该是student.grade(marks),而不是student.grade(int marks)(假设在LabClass 中有一个名为marks 的字段,类型为int(这将是一个非常奇怪的设计:课程没有成绩,而且你很少给出所有学生的成绩相同))。
  • 做:student.grade(marks);
  • @JBNizet 我在 LabClass 中没有一个名为标记的字段,类型为 int。不能在外部输入这些字段吗?在我的 Student 类中有一个名为 Grades 的字段,类型为 int,但我认为它不相关?
  • 您想为每个学生分配一个成绩,但是您要分配的成绩在哪里?它们会从控制台接收吗?您是否要手动创建成绩列表并为每个学生分配一个成绩?
  • @MauricioMartínezJ​​iménez 他们应该通过外部参数接收。对于上下文,我是一个超级初学者,所以我真的不知道如何解释它,但是我的软件 BlueJ 有一个对话框,当您创建外部参数时会出现。

标签: java arraylist methods bluej


【解决方案1】:

首先让我们在这里澄清一些概念。正如其他提到的,这段代码:

public void giveGrades(){
   for(Student student : students){
       student.grade(int marks);
   }
}

不起作用,因为您在使用方法时不能设置参数的类型(您在声明它时这样做)。所以这里的第一个“修复”是:

public void giveGrades(){
   for(Student student : students){
       student.grade(marks);
   }
}

现在的问题是:什么是标记?它没有在任何地方定义。假设我们确实定义了它,并且它的值为 3。前面的代码将 3 指定为所有学生的成绩。这不是很现实,即使“标记”是我们以某种方式接收作为参数的 int。我们可能想要每个学生的成绩,这意味着我们需要一个列表。因此,假设我们想要一个包含要分配给学生的成绩列表的参数:ArrayList&lt;Integer&gt;grades(如果需要,您可以稍后将其更改为 Double,但想法是相同的)。在这种情况下,我们需要遍历学生列表中的每个元素,并从列表成绩中分配一个元素。像这样的:

你有一个学生名单students: &lt;s1, s2, s3, s4&gt;

你有一个成绩列表grades: &lt;g1, g2, g3, g4&gt;

您要从列表中为每个学生分配一个成绩:s1.grade(g1), s2.grade(g2), s3.grade(g3), s4.grade(g4)

我们可以使用 for also 来实现这一点,但它允许我们迭代两个列表。一种可能的方式(还有更复杂的方式):

public void giveGrades(ArrayList<Integer> grades){
   for(int i = 0; i < students.size(); i++){
       students.get(i).grade(grades.get(i))
   }
}

这是从 java 的角度来看的。现在,根据您的 cmets,您需要一个外部参数,并且您提到了 bluej 的使用。在问题How do I enter parameters for an ArrayList in BlueJ? 中,您可以更好地了解如何将参数传递给您的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多