在Java中创建类时遇到问题。有些方法不太确定

在Java中创建类时遇到问题。有些方法不太确定,java,Java,好的,这是我正在做的作业: 实现一个类Student(您可以使用为lab创建的类并将其添加到该类中)。除了该类已有的任何其他属性外,Student对象还将具有总测验分数。请确保编写一个完整的类(即正确的属性、构造函数、访问器和变体) 需要的其他方法有:AddQuike(int score)、showStudentInfo()和getAverageScore()。请注意,为了计算平均值,类需要知道测验的数量。 driver/tester类将创建三(3)个学生对象。每个学生对象的方法将被调用五次以添

好的,这是我正在做的作业:

实现一个类Student(您可以使用为lab创建的类并将其添加到该类中)。除了该类已有的任何其他属性外,Student对象还将具有总测验分数。请确保编写一个完整的类(即正确的属性、构造函数、访问器和变体)

需要的其他方法有:AddQuike(int score)、showStudentInfo()和getAverageScore()。请注意,为了计算平均值,类需要知道测验的数量。 driver/tester类将创建三(3)个学生对象。每个学生对象的方法将被调用五次以添加五(5)个测验分数

我建议您使用随机类来生成测验值,而不是硬编码。然后驱动程序调用Student's method来显示学生的姓名、所有五个测验分数以及测验的平均分数。”

我有一个基本的想法,需要做什么,但我只是不确定的一些方法。例如,“getAverageScore”方法就是我遇到麻烦的方法。如果我只是在测试程序开始时初始化age name和major,我甚至需要get和set方法吗?非常感谢您对我的课堂上需要添加或修改的内容的任何帮助。以下是我目前掌握的代码:

import java.util.Random;

public class Student
{
  private int Age;
  private String Name;
  private String Major;
  private int Score;

  public Student(String n, int a, String m)
  {
    Name = n;
    Age = a;
    Major = m;
  }

  public String showStudentinfo()
  { return (Name + " " + Age + " " + Major + "\n");
  }

  public int addQuiz()
  { Score = randomNumbers.nextInt(101);
    return Score;
  }

  public int getAverageScore()
  { 
  }

  //setter methods
  public void setAge(int a)
  { Age = a;
  }
  public void setName(String n)
  { Name = n;
  }
  public void setMajor(String m)
  { Major = m;
  }

  //getter methods
  public int getAge()
  { return Age;
  }
  public String getName()
  { return Name;
  }
  public String getMajor()
  { return Major;
  }
}

大部分看起来不错,但也有一些问题,主要与风格有关(可能有点主观)

1) 你不会在任何地方初始化随机数

2) 变量名称应以小写字母开头。大写的名称通常为类保留

3) 不要使用单字母变量名,即使是参数。它们是令人讨厌的模糊信息。使用诸如setAge(intnewage)之类的信息量更大的工具

4) 听起来他们想让你存储所有考试分数的总和(这很奇怪,但是嘿),然后计算平均值。要从一个总和中得到平均值,你需要知道总和中包含了多少个测试,所以你必须在某个地方跟踪它,并相应地增加它。在AddQuike中,您现在只需跟踪最近一次测验的分数


5) 不要在与{相同的行上启动函数体,这很难看。

为了使
getAverageScore()
工作,您需要跟踪单个分数。您可以使用
ArrayList
之类的操作,并将单个分数添加到其中。(或者,您可以保留一个
avgScore
属性以及一个
numOfTests
属性,并根据该属性计算新的平均值——尽管如果您希望将平均值作为
int
的话,这可能会随着时间的推移变得更加不准确)

这里是一个依赖于
ArrayList
的解决方案的一部分。我假设您的方法签名是正确的,并且您实际上不想返回
双精度
浮点
(即,您必须对分数进行上下取整)

public int getAverageScore(){
浮点和=0.0;//因此舍入有效,整数除法截断
//如果你不熟悉的话,
//将以下行读作“分数表中的每个分数”
对于(整型分数:scoreList){//scoreList的类型为ArrayList
总和=总和+分数;
}
返回Math.round(sum/scoreList.size());
}
现在,我不向您展示如何正确地实现
scoreList
,因为这是家庭作业,您仍然应该自己做一些。提示:您不能使用基本类型(如
int
)在
ArrayList
中,您需要存储
Integer
s。您可以使用
newinteger(int-value)
创建特定值的整数。如果您知道将有固定数量的分数,则可以使用
int
数组


要使此解决方案起作用,您需要添加
scoreList
属性,并且需要更改
addquick()的方式
有效。

字段应以小写开头。setter不是强制性的,它只是取决于它是否有意义。Methodos AddQuike应以int作为参数,并且您应该有一个字段int numberOfQuizzes。该字段应在每次添加测验分数时递增。然后,平均分数就是d分数的总和根据测验次数,你必须保持所有分数和测验次数的总和,因此添加两个字段,sumOfQuizGrades和countOfQuizGrades,并通过方法addQuiz将分数相加并增加计数


顺便说一句,不要更改AddQuike的签名。它不能包含随机数,随机数应添加到main方法中。

你需要将测验分数存储在某个地方。你的教授说会有不止一个。在“学生”构造函数上方,添加大小为5的数组或ArrayList。我将使用数组来实现这一点o:

private int[] scores = new int[5];
然后在获取分数的方法中,使用循环将分数添加到数组中:

public void addQuiz() { 
    for(int i = 0; i < 5; i++){ //Loops through and adds 5 scores
    int score = randomNumbers.nextInt(101);
    scores[i] = score;
    }
}

实际上,我还没有测试过这段代码,我自己也是一个初学者,但希望这能让您走上正确的道路。

好的,那么对于“numberOfQuizzes”方法,我在测试仪中调用它来添加每个学生的随机测验分数吗?在测试仪中,我使用while循环让每个学生调用“AddQuizz”5次,但如何将其保存在numberofQuizzes方法中?请使用上面建议的数组列表,它更干净。
public void addQuiz() { 
    for(int i = 0; i < 5; i++){ //Loops through and adds 5 scores
    int score = randomNumbers.nextInt(101);
    scores[i] = score;
    }
}
public int getAverageScore() {
    int totalScore = scores[0] + scores[1] + scores[2] + scores[3] + scores[4];
    int avgScore = totalScore / 5;
    return avgScore;
}