在我的程序中,我有主题,每个主题可以有许多作业。我正在尝试查找“ assignmentGradeAchieved”不为空的每个作业的平均成绩。
我在数组中存储了这些assignmentGradeAchieved。我想找到平均结果(将每个数字相加然后除以项目数),但是它没有显示正确的arraysize。当它应为2时显示为1。 这是我尝试查找arraysize的代码行: arraySize =(assignmentGradesAchieved.size());
//对于属于该主题的每个作业,如果AssignmentGradeAchieved不为null,则将AssignmentGradeAchieved添加到名为AssignmentGradesAchieved的数组列表中。 //如果一个主题有多个具有AssignmentGradeAchieved的作业,则应将多个以上AssignmentGradeAchieved添加到名为AssignmentGradesAchieved的畜牧学家中。因此,数组的大小应大于一。 //我的一个主题有两个都具有AssignmentGradeAchieved的作业,因此数组大小应为2而不是1
for(int i=0; i<subjects.size(); i++){ //for each subject in the list
Subject subject = subjects.get(i);
List<Assignment> assignments = subject.getAssignment(); //Get the list of assignments belonging to current subject
for(int y=0; y<assignments.size(); y++ ) { //For each assignment in the list
Assignment assignment = assignments.get(y);
ArrayList<Double> assignmentGradesAchieved = new ArrayList<Double>();
if(assignments.get(y).getAssignmentGradeAchieved()!=null) {
assignmentGradesAchieved.add(assignments.get(y).getAssignmentGradeAchieved());
arraySize = 0;
arraySize = (assignmentGradesAchieved.size());
for(int z=0; z<assignmentGradesAchieved.size(); z++) {
arraySize = 0;
allAssignments = allAssignments + assignmentGradesAchieved.get(z);
arraySize = (assignmentGradesAchieved.size());
averageAssignGrade = (allAssignments / arraySize);
}
}
}
}
解决方案:
for(int i=0; i<subjects.size(); i++){ //for each subject in the list
Subject subject = subjects.get(i);
List<Assignment> assignments = subject.getAssignment(); //Get the list of assignments belonging to current subject
ArrayList<Double> assignmentGradesAchieved = new ArrayList<Double>();
for(int y=0; y<assignments.size(); y++ ) { //For each assignment in the list
Assignment assignment = assignments.get(y);
allAssignments =0;
if(assignments.get(y).getAssignmentGradeAchieved()!=null) {
assignmentGradesAchieved.add(assignments.get(y).getAssignmentGradeAchieved());
for(int z=0; z<assignmentGradesAchieved.size(); z++) {
allAssignments = allAssignments + assignmentGradesAchieved.get(z);
}
}
}
arraySize = 0;
arraySize = (assignmentGradesAchieved.size());
averageAssignGrade = (allAssignments / arraySize);
}
答案 0 :(得分:2)
您的AssignmentGradesAchieved声明位于for循环内,因此它将始终被重置,因此您的变量将始终仅具有一个赋值等级。将您的声明置于循环之外
答案 1 :(得分:1)
在代码中,每次找到一个AssignmentGradeAchieved时,您都在计算平均值,这是错误的。主要策略有两种:
对于第一种情况,您应该具有以下内容:
for(int i=0; i<subjects.size(); i++){ //for each subject in the list
Subject subject = subjects.get(i);
List<Assignment> assignments = subject.getAssignment(); //Get the list of assignments belonging to current subject
// declare outside the loop
ArrayList<Double> assignmentGradesAchieved = new ArrayList<Double>();
// collect all the grades
for(int y=0; y<assignments.size(); y++ ) { //For each assignment in the list
Assignment assignment = assignments.get(y);
if(assignments.get(y).getAssignmentGradeAchieved()!=null) {
assignmentGradesAchieved.add(assignments.get(y).getAssignmentGradeAchieved());
}
}
// calculate average
Double allAssignments = 0;
for(int z=0; z<assignmentGradesAchieved.size(); z++) {
allAssignments = allAssignments + assignmentGradesAchieved.get(z);
}
int arraySize = (assignmentGradesAchieved.size());
Double averageAssignGrade = (allAssignments / arraySize);
}
PD:请小心您的身份。
PD2:这不是最好的方法(并且故意以这种方式编写我发布的解决方案),第二种方法更好。您应该尝试将其作为作业。