2013-02-20 408 views
-1

我對此問題有疑問:計算平均值?

給出測試結果列表(每個測試結果都包含測試日期,學生ID和學生的得分);返回每個學生的最終分數。學生的最終分數是以他/她的5個最高考試分數的平均值計算的。你可以假設每個學生至少有5個考試成績。

現在,這是事情。我不想要答案。

我試過散列,但哈希可以提供地址的密鑰,所以它不適用於我。

我想過使用數組列表迭代想法來計算平均值並返回前五個分數,但是如何將數字與studentID分配?

說我想要的輸出是:邁克,15.這不是問題需要什麼? 獲取學生ID和平均數。 請幫我解決一些線索,我正在學習。

回答

3

僅僅通過學生證的測試結果(爲主要排序關鍵字)和降分(小類鍵)然後再通過收集如下(僞代碼)進行排序:

lastId = element[0].Id - 1 
for each record in element[]: 
    if record.Id != lastId: 
     lastId = record.Id 
     counter = 5 
     sum = 0 
    if counter > 0: 
     sum = sum + record.score 
     counter = counter - 1 
     if counter == 0: 
      print "Student ", record.Id, " got average of ", (sum/5) 

由於數據你知道一個給定學生的所有分數都在一起,並且前五個分數是最高的。因此,上面的代碼將允許你全部工作。

請記住,這依賴於你的「每個學生至少有五個結果」的規則。沒有這一點,你必須改變平均計算代碼,並可能對最後一名學生做一些工作後循環。

0

使用面向對象的原則。這裏有一些提示。 創建一個Test類來表示每個測試。

class Test 
{ 
    Date date; 
    Student s;   //store instance of student- has a relationship to Student 
    double[] scores;  //store test scores 
    double finalscore; //final score 
    Test() { 
    //Initialize scores array and assign default values (0) 
    } 
} 

創建一個Student類來表示每個學生。

class Student 
{ 
    String name; 
    int id; 
} 

創建測試數組列表。

List<Test> tests = new ArrayList<Test>(); 

它現在只是一個循環測試,並找到平均存儲在finalscore的問題。

+0

您可以通過將所有'Test'屬性移動到'Student'類並刪除像'Date'和'finalscore'這樣的不相關數據來增強設計。 – 2013-02-20 06:09:25