我试图从对象中获得平均分数,但却无法想到这样做的好方法。
我有10个对象,它们都有自己的分数。
我创建了setter和getter类来获得平均值,但我遇到的问题是我会创建这样的东西,这样即使我把对象的分数放到这个方法中,持有者也会去回到0。
public double getAverage() {
return average;
}
public void setAverage(double studentScore) {
double holder = 0;
average = holder + studentScore;
holder = average;
this.average = studentScore;
}
我还在考虑为每一个分数创建setter和getter方法,但这会占用大量空间,我认为必须有更好的方法来实现它。
以下是我在主要方法
中使用的代码片段public static void main(String[] args) {
final String STUDENT_INFO = "HW1_Students.txt";
List<GradeInfo> list = new ArrayList<GradeInfo>();
Scanner inputFile = null;
GradeInfo person1 = new GradeInfo();
GradeInfo person2 = new GradeInfo();
GradeInfo person3 = new GradeInfo();
GradeInfo person4 = new GradeInfo();
GradeInfo person5 = new GradeInfo();
GradeInfo person6 = new GradeInfo();
GradeInfo person7 = new GradeInfo();
GradeInfo person8 = new GradeInfo();
GradeInfo person9 = new GradeInfo();
GradeInfo person10 = new GradeInfo();
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
list.add(person5);
list.add(person6);
list.add(person7);
list.add(person8);
list.add(person9);
list.add(person10);
try {
inputFile = new Scanner(new File(STUDENT_INFO));
}
catch (FileNotFoundException ex) {
System.out.println("\n *** Exception occured while opening "
+ ex.getMessage() + " ***");
System.exit(-1);
}
readData(inputFile, STUDENT_INFO, person1, person2, person3, person4,
person5, person6, person7, person8, person9, person10);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
非常感谢任何建议,谢谢。
答案 0 :(得分:1)
public void setAverage(ArrayList<GradeInfo> grades) {
double average = 0;
for(int i = 0; i < grades.size(); i++){
average += grades.get(i);
}
average = average / grades.size();
this.average = average;
}
我希望这就是你的意思......这个方法将采用你的Arraylist,并在你的有线“setter and getter class”中设置正确的平均分数。
答案 1 :(得分:1)
我真的不明白你在这里要做什么:
public void setAverage(double studentScore) {
double holder = 0;
average = holder + studentScore;
holder = average;
this.average = studentScore;
}
但它的逻辑是holder
将被重置为0因为你初始化它并在你的函数的beginnig中将它设置为0,或者我误解了这个?
只需在您的设置者之外创建holder
。
如果您只想获得一堆值的平均值,只需将所有值加在一起,然后将结果除以值的数量/数量。
例如:
public double getAverage(List <GradeInfo> l){
int totalAmount;
for(i = 0; i < l.size(); i++){
totalAmount += l.get(i);
}
double average = totalAmount / l.size();
return average;
}
答案 2 :(得分:0)
这可能不适用于您的计划,因为您的计算中可能至少有一个正值。但是,如果他正在测试所有可能的案例,我可以看到一位教授为它取得分数。
如果您遵循Sand的建议,请确保在使用平均值计算中的大小之前检查arraylist的大小是否大于零。你不能在Java中除以零。相反,这样做:
public double getAverage(List <GradeInfo> l){
int totalAmount;
for(i = 0; i < l.size(); i++){
totalAmount += l.get(i);
}
if (l.size() > 0) {
double average = totalAmount / l.size();
return average;
else {
double average = 0;
}
return average;
}