2012-03-04 26 views
0

我試圖顯示學生的平均分,但它顯示錯誤的數字,這是我試過。任何幫助將不勝感激。平均(使用arraylist)java

import java.util.ArrayList; 

class Course 
{ 

    private ArrayList<Student> people = new ArrayList<Student>(); 

// return the average mark in the course 

    public double average() 
    { 
     double average = 0.0; 
     int i = 0; 

     for (i = 1; i < people.size(); i++) 
     { 
      int tmark = people.get(i).getMark() ; 
      { 
       average = tmark/i; 
      }  
     } 
     return average; 
    } 

} 
+0

要麼有一些代碼丟失,要麼根本沒有意義。爲什麼圍繞avarage分配的區塊?這裏的代碼基本上是這樣說的:'平均=最後一個學生的標記/列表中的學生數量' – nfechner 2012-03-04 19:28:49

+1

您是否知道如何計算「手工」數字序列的平均值,即只用筆,紙和大腦?你可以從逐步描述你將如何做到這一點開始。你的代碼根本沒有意義 - 這些問題遠遠超出了對如何處理Java列表的理解。 – 2012-03-04 19:41:18

回答

3

肯定,你是不是計算平均..你有由大小的所有值相加後除以:

public double average() 
{ 
    double average = 0.0; 
    for (int i = 0; i < people.size(); i++) { 
     average += people.get(i).getMark() ; 
    } 
    return average/people.size(); 
} 
0

試圖改變這一點:

所有的
public double average() 
    { 
     double average = 0.0; 


     for (int i = 0; i < people.size(); i++) 
     { 
      int tmark = people.get(i).getMark() ; 
      { 
       average += tmark; 
      }  
     } 
     average /= people.size(); 

     return average; 
    } 

} 
4

首先,get()是0開始,而不是從1開始。

其次,你需要把整個總和除以people.size()而不是i,否則第一個學生變得比第100個重要。

更新:第三,目前的代碼只考慮最後一個學生,你不覺得嗎?

0

正如其他人所提到的,ArrayList Java中的索引從0

開始。但是,你可能想在這裏,而不是使用for each loop。替換:

for (i = 1; i < people.size(); i++) 

for (Student s : people) 

總結總成績,然後用people.size()除以@alf的建議。

0

嘗試:

double total = 0d; 
for(Student student : people) { 
    total += student.getMark(); 
} 
double average = total/(double)people.size(); 
2

您需要通過您的代碼上工作紙。你正在做一些非常奇特的事情。獲取一點論文,寫下學生的一個示例數組(或者只是標記),然後一次遍歷循環一次。並回答這些問題

  • 每個變量在循環開始時的值是什麼?
  • 每個循環結束時每個變量的值是多少?
  • 你會如何用筆和紙來計算自己的平均值?
  • 上面的點如何轉化爲for循環?所有的工作都需要在for循環中完成嗎?

最後一點。應該注意的是,ArrayList或數組中的第一個元素位於索引0處,最後一個位於索引處(大小爲1)。

例如。

index: 0 1 2 
array: ['a', 'b', 'c'] 
size or length: 3