簡體   English   中英

嘗試查找數組平均值時數組大小不正確,如何解決?

[英]Incorrect array size when trying to find the average of an array, how do I fix this?

在我的程序中,我有一些科目,每個科目可以有很多作業。 我正在嘗試查找“ 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);


    }

您的assignmentGradesAchieved聲明位於for循環內,因此它總是被重置,因此您的變量將始終只有一個賦值等級。 將您的聲明置於循環之外

在代碼中,每次找到一個AssignmentGradeAchieved時,您都在計算平均值,這是錯誤的。 有兩種主要策略:

  • 保存收集的數字,然后計算平均值
  • 分別保存assignmentGradeAchieved的總和和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);
        }

PD:請小心您的身份。

PD2:這不是最好的方法(並且故意以這種方式編寫我發布的解決方案),第二種更好。 您應該嘗試將其作為家庭作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM