Java 数组大小不正确尝试查找数组的平均值时,如何修复此问题?

Java 数组大小不正确尝试查找数组的平均值时,如何修复此问题?,java,arrays,average,Java,Arrays,Average,在我的课程中,我有很多科目,每个科目都可以有很多作业。我试图找到每个作业的平均成绩,其中“AssignmentGradeAcreated”不为空 在一个数组中,我存储了这些赋值。我想找到平均结果(将每个数字相加,然后除以项目数),但是它没有显示正确的数组大小。当它应该是2时,它显示为1。 下面是我尝试查找arraysize的代码行: arraySize=(assignmentgradesacheed.size()) //对于属于主题的每个赋值,如果AssignmentGradeAchieved不

在我的课程中,我有很多科目,每个科目都可以有很多作业。我试图找到每个作业的平均成绩,其中“AssignmentGradeAcreated”不为空

在一个数组中,我存储了这些赋值。我想找到平均结果(将每个数字相加,然后除以项目数),但是它没有显示正确的数组大小。当它应该是2时,它显示为1。 下面是我尝试查找arraysize的代码行: arraySize=(assignmentgradesacheed.size())

//对于属于主题的每个赋值,如果AssignmentGradeAchieved不为null,则将AssignmentGradeAchieved添加到名为AssignmentGradesHieved的arraylist中。 //如果一个受试者有多个作业已完成AssignmentGradeAchieved,则应将多个AssignmentGradeAchieved添加到名为AssignmentGradesHieved的ArryList中。因此,数组的大小应该不止一个。 //我的一个科目有两个作业,都达到了AssignmentGrade,因此数组大小应该是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);

                    }
                }
    }


    }

用于(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循环,所以它应该为每个任务做它谢谢你这么多的工作,不敢相信我没有发现哈哈哈谢谢你这么多的工作,不敢相信我没有发现哈哈哈