Java 制作一个代表平均测试分数的类
制作一个代表平均测试分数的类。让全班学生不受限制地获取分数,并计算考试次数和平均数 我似乎无法找到一种方法来存储所有的测试分数,以及计算给定文件中的测试数量。目前,这段代码将只计算一个测试,并且只存储最后给出的数字 此文件由讲师提供,不能更改Java 制作一个代表平均测试分数的类,java,Java,制作一个代表平均测试分数的类。让全班学生不受限制地获取分数,并计算考试次数和平均数 我似乎无法找到一种方法来存储所有的测试分数,以及计算给定文件中的测试数量。目前,这段代码将只计算一个测试,并且只存储最后给出的数字 此文件由讲师提供,不能更改 public class TestScoresDemo { public static void main(String[] args) { TestScores t1 = new TestScores("Alice");
public class TestScoresDemo {
public static void main(String[] args) {
TestScores t1 = new TestScores("Alice");
TestScores t2 = new TestScores("Bob");
t1.addTestScore(50);
t1.addTestScore(60);
t1.addTestScore(54);
t1.addTestScore(73);
t1.addTestScore(88);
t1.addTestScore(92);
t2.addTestScore(87);
t2.addTestScore(97);
t2.addTestScore(37);
t2.addTestScore(99);
System.out.println("-- Alice --");
System.out.println("Num tests taken: " + t1.getNumTestsTaken());
System.out.println("Average: " + t1.getAverage());
System.out.println("-- Bob --");
System.out.println("Num tests taken: " + t2.getNumTestsTaken());
System.out.println("Average: " + t2.getAverage());
}
}
讲师给出的文件结束。
以下是我到目前为止的情况
import java.util.Scanner;
public class TestScores {
private String Name;
private double TotalScore;
private int NumScores;
private double Earned;
public TestScores(String name) {
Name = name;
}
public void addTestScore(double earned) {
Earned = earned;
}
public int getNumTestsTaken() {
NumScores = 0;
while (Earned < 100.0) {
NumScores++;
}
return NumScores;
}
public double getAverage() {
try (Scanner scanner = new Scanner(Name)) {
double sum = 0.0;
while (Earned <100.0) {
sum += Earned;
TotalScore = sum / NumScores;
break;
}
return TotalScore;
}
}
}
import java.util.Scanner;
公开课考试成绩{
私有字符串名称;
个人双倍总分;
私人国际货币基金组织;
私人双挣;
公共测试分数(字符串名称){
名称=名称;
}
公共无效添加测试分数(双倍){
挣得=挣得;
}
public int getNumTestsTaken(){
numcores=0;
而(挣得<100.0){
numcores++;
}
返回numcores;
}
公共双平均值(){
尝试(扫描仪=新扫描仪(名称)){
双和=0.0;
while(owned您没有正确使用变量numcores或TotalScore。此外,您应该为变量使用Java命名约定,因此将名称中的第一个字母更改为小写字母,然后使用大写字母,也称为驼峰大小写。请尝试以下操作
public TestScores(String name) {
this.name = name;
numScores = 0;
totalScore = 0.0;
}
public void addTestScore(double earned) {
totalScore += earned; //add to the running total
numScores++; //add to the count
}
public int getNumTestsTaken() {
return numScores; //simply return the counter
}
public double getAverage() {
return totalScore/numScores; //return the total scores added up divided by the count
}
解决此问题有两种方法,以上评论中讨论了这两种方法:
使用列表/数组/集合存储每个值
添加新元素时,将数字加总
正如您的要求所述,TestScores
类不能更改,那么它将第一种方法从可能的解决方案中排除1,这使得唯一可行的答案成为第二种方法
但在写下答案之前,我会拯救@Turing85's
关于整体代码设计的一点说明:变量名和字段名应始终以小写字母开头(private String Name;
->private String Name;
)
因此,您的TestScores
属性可能会变成:
private String name;
private double totalScore;
private int numScores;
private double earned;
这将使您和我们大家更容易阅读您的程序。阅读并遵循
现在让我们看看您的程序现在正在做什么:
t1.addTestScore(50); //earned = 50
t1.addTestScore(60); //earned = 60
t1.addTestScore(54); //earned = 54
你想要什么:
t1.addTestScore(50); //earned = 50
t1.addTestScore(60); //earned = 110
t1.addTestScore(54); //earned = 164
(将变量名更改为以小写字母开头后)您需要做的就是:
现在,getNumTestsTaken
方法可能会变成:
public int getNumTestsTaken() {
return numScores;
}
您的getAverage
方法将变成这样:
public double getAverage() {
return earned / numScores; //We already know the total amount earned as it's stored in "earned" variable and the number of scores stored in "numScores" so, this becomes a simple operation
}
对于代码的其余部分,我认为还可以
1我将此答案中的数组/集合保留下来,但将此答案作为社区wiki,以防有人想添加它和答案。不过,我已经在此处解释了不适合此选项的原因(根据OP的要求)。“我似乎无法找到存储所有测试分数的方法。”您需要某种数组、列表或其他集合。@csmckelvey在本例中,不是真的。他们可以在添加测试分数时保留一个运行的总和和分数。分数添加后,他们似乎不需要生成列表。欢迎使用堆栈溢出!如果您在课堂上学习的概念有困难,我建议你和其他学生和你的老师谈谈。你也应该更仔细地看看你的getAverage()
method。选择一些分数值,手工计算平均值。然后检查你的方法是否计算出相同的结果。@FedericoklezCulloca这当然是一个解决方案。我不确定初学者是否比存储所有分数的列表更容易理解和编写。@FedericoklezCulloca我只想保持一个运行的total更难,因为它是另一个抽象层次。一些初学者可能会理解它,但我怀疑,对于大多数人来说,存储列表更接近于他们认为的手工操作。当然,学习list
API会增加复杂性。因此,哪一个更难,可能是一个难题。是的,th谢谢你的帮助,我很感谢你的反馈。
public double getAverage() {
return earned / numScores; //We already know the total amount earned as it's stored in "earned" variable and the number of scores stored in "numScores" so, this becomes a simple operation
}