Java 数组大小不正确尝试查找数组的平均值时,如何修复此问题?
在我的课程中,我有很多科目,每个科目都可以有很多作业。我试图找到每个作业的平均成绩,其中“AssignmentGradeAcreated”不为空 在一个数组中,我存储了这些赋值。我想找到平均结果(将每个数字相加,然后除以项目数),但是它没有显示正确的数组大小。当它应该是2时,它显示为1。 下面是我尝试查找arraysize的代码行: arraySize=(assignmentgradesacheed.size()) //对于属于主题的每个赋值,如果AssignmentGradeAchieved不为null,则将AssignmentGradeAchieved添加到名为AssignmentGradesHieved的arraylist中。 //如果一个受试者有多个作业已完成AssignmentGradeAchieved,则应将多个AssignmentGradeAchieved添加到名为AssignmentGradesHieved的ArryList中。因此,数组的大小应该不止一个。 //我的一个科目有两个作业,都达到了AssignmentGrade,因此数组大小应该是2而不是1Java 数组大小不正确尝试查找数组的平均值时,如何修复此问题?,java,arrays,average,Java,Arrays,Average,在我的课程中,我有很多科目,每个科目都可以有很多作业。我试图找到每个作业的平均成绩,其中“AssignmentGradeAcreated”不为空 在一个数组中,我存储了这些赋值。我想找到平均结果(将每个数字相加,然后除以项目数),但是它没有显示正确的数组大小。当它应该是2时,它显示为1。 下面是我尝试查找arraysize的代码行: arraySize=(assignmentgradesacheed.size()) //对于属于主题的每个赋值,如果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
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);
}
}
}
}
用于(int i=0;i您的AssignmentGradesHieved声明在for循环内,因此它总是被重置,因此您的变量将始终只有一个赋值等级。将您的声明放在循环外您的AssignmentGradesHieved声明在for循环内,因此它总是被重置,因此您的变量将始终只有一个作业分数。将您的声明置于循环之外在代码中,您每次发现作业分数达到时都在计算平均值,这是错误的。有两种主要策略:
- 保存收集的数字,然后计算平均值
- 分别保存完成的assignmentGrade和assignmentGrade的数量之和。然后除以得到平均值
对于第一种情况,您应该有如下内容:
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);
}
for(int i=0;i在代码中,您每次发现一个AssignmentGrade实现时都在计算平均值,这是错误的。有两种主要策略:
- 保存收集的数字,然后计算平均值
- 分别保存完成的assignmentGrade和assignmentGrade的数量之和。然后除以得到平均值
对于第一种情况,您应该有如下内容:
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);
}
for(int i=0;i当只有一个assignmentgradesacheed.add
@alanfcm时,你为什么说它应该是2,这样我就可以为assignments中的每个assignment“assignmentgradesacheed.add(assignments.get(y).getassignmentgradeaceated());”-基本上为assignments中的每个assignment将assignmentgradeaceated添加到这个数组列表中(属于当前主题的)我的一个科目有两个作业,所以应该有两个作业arraylist@alanfcm只有一个,但它在for循环中,所以它应该为每个作业执行。当只有一个assignmentgrades完成时,为什么说它应该是2。添加@alanfcm,这样我就可以为assignments中的每个作业执行任务了“AssignmentGradesHieved.add(assignments.get(y).GetAssignmentGradeAcreated());”-基本上是将AssignmentGradeAcreated添加到此arraylist中,用于作业(属于当前主题)中的每个作业)我的一个科目有两个作业,所以应该有两个作业arraylist@alanfcm只有一个,但它是一个for循环,所以它应该为每个任务做它谢谢你这么多的工作,不敢相信我没有发现哈哈哈谢谢你这么多的工作,不敢相信我没有发现哈哈哈