2013-10-03 129 views
0

試圖返回最高分,但它返回錯誤的分數......不知道是什麼問題,如果我設置arraylist中的第一個對象到最高分,然後與它比較?arraylist沒有打印正確的數據

public String findHighest() { 
Student newStu; 
Student s; 

int highest; 
s=collegeList.get(0); 
highest=s.getQuizScore(); 

for (int i=1; i<collegeList.size() ;i++) { 

    newStu=collegeList.get(i); 

    if (highest>newStu.getQuizScore()){ 
     highest=newStu.getQuizScore(); 
     return newStu.toString(); 
    } 

} 

}


public String findHighest() { 
    Student newStu; 
    Student s; 

    int highest; 
    s=collegeList.get(0); 
    highest=s.getQuizScore(); 

    for (int i = 1; i < collegeList.size(); i++) { 
     newStu = collegeList.get(i); 

     if (highest < newStu.getQuizScore()){ 
      highest = newStu.getQuizScore(); 

     } 

    } 

    return newStu.toString(); 
} 

//嘗試這樣做,口口聲聲說newStu可能尚未intiailized ...

+0

這是一個想法。根據分數排序列表,並彈出最後一個(或第一個基於排序順序):P – MadProgrammer

回答

2

你的條件似乎是相反的:

if (highest>newStu.getQuizScore()){ 

更改爲:

if (highest<newStu.getQuizScore()){ 
0

for循環應該是這樣的:

for (int i=1; i<collegeList.size() ;i++) { 

newStu=collegeList.get(i); 

    if (highest<newStu.getQuizScore()){ 
     highest=newStu.getQuizScore(); 
    } 

} 
return newStu.toString(); //return the value after for loop 
1

第一件事是從0開始的for循環的索引那麼你應該在循環之後把你的回報,因爲環路會到達返回時自動停止。

1

您正在返回迭代中的第一個最高分。

if (highest>newStu.getQuizScore()){ //here the comparison problem 
    highest=newStu.getQuizScore(); 
    return newStu.toString(); // here returning the first highest score in the iteration. 
} 

試試下面的代碼

public String findHighest() { 
    Student newStu; 
    Student s; 

    int highest; 
    s=collegeList.get(0); 
    highest=s.getQuizScore(); 

    for (int i=1; i<collegeList.size() ;i++) { 

     f (highest<collegeList.get(i)){ 
      highest=newStu.getQuizScore(); 
      newStu=collegeList.get(i) 

     } 

    } 
    return newStu.toString(); 
} 
2

有幾個方法可供選擇。

第一個也是最直接的辦法是修復邏輯錯誤:您發現的最大元素這個時刻被返回。不平等也是相反的。

更改爲:

for (int i = 1; i < collegeList.size(); i++) { 
    newStu = collegeList.get(i); 

    if (highest < newStu.getQuizScore()){ 
     highest = newStu.getQuizScore(); 
    } 

} 
return newStu.toString(); 

注意,不平等翻轉反映,如果highest實際上是小於一些學生的測驗成績,那麼我們已經找到了新的最高紀錄。

找到新的最高值並不能保證我們發現最高。我們必須繼續迭代直到我們確定。

另一種方法是使用一個SortedSet<Student>,並有Student實施Comparable,這樣,當一個將值插入集,它們會自動通過他們的成績排序。

該宣言是這樣的:

@Override 
public int compareTo(Student other) { 
    if(other == null) { 
     return 1; 
    } 
    if(quizScore == other.getQuizScore()) { 
     return 0; 
    } 

    if(quizScore < other.getQuizScore()) { 
     return -1; 
    } else { 
     return 1; 
    } 
} 

...那麼,您建造TreeSet<Student>正是如此:

SortedSet<Student> orderedStudents = new TreeSet<>(); 

...你可以將元素放入這套喜歡你會列出你的名單。您最大的元素現在位於該集的末尾處,並且可以通過簡單的last()調用進行訪問。

+0

不斷給我一個錯誤說變量newStu可能尚未初始化... – user2809437

+0

...因此,將其初始化爲空。 – Makoto