[英]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時,您都在計算平均值,這是錯誤的。 有兩種主要策略:
對於第一種情況,您應該具有以下內容:
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.