2012-10-08 68 views
3

我有兩個不同的函數來嘗試查找ArrayList中的最大值。 我有兩個,因爲我第一次看到他們是否會返回相同的價值,然後表現時間。查找ArrayList中的最大值

但是它們正在重現相同的值,但它似乎是ArrayList的最後一個值,無論它是否最大。我認爲這可能是取代價值的關鍵。

代碼如下,我認爲它只是一個簡單的錯誤,但任何人都可以指出我正確的方向嗎?

double highest = fitnessArray.get(0); 

for (int s = 0; s <fitnessArray.size(); s++){ 
    if (fitnessArray.get(s)>highest) 
     highest=fitnessArray.get(s); 

} 

System.out.println("highest fitness = " + highest 
       + " indoexOf = " + fitnessArray.indexOf(highest)); 

double highestFitness; 

highestFitness = Collections.max(fitnessArray); 
System.out.println("lowest fitness 2 = " + highestFitness); 
+0

對'indexOf()'的調用是100%冗餘的,並且調用'get()'兩次。 –

+0

你的代碼看起來很好,我試過了,它給了我正確的價值。健身陣容中有什麼? –

+0

您的for循環也應該從索引1開始,因爲您已經在for循環之前檢查了索引0。 –

回答

1

如果您存儲索引數量最多的是你可能有更好的運氣:

if (fitnessArray.size() > 0) { 
    double highest = fitnessArray.get(0); 
    int highestIndex = 0; 

    for (int s = 1; s < fitnessArray.size(); s++){ 
     double curValue = fitnessArray.get(s); 
     if (curValue > highest) { 
      highest = curValue; 
      highestIndex = s; 
     } 
    } 

    System.out.println("highest fitness = " + highest + " indoexOf = " + highestIndex); 
} 
+0

您的代碼如果列表爲空,將會失敗 –

+0

嗯,我剛剛從原始示例中複製出來。我認爲他們事先檢查數組是否爲空。 –

+1

您應該存儲大小,而不是始終調用該方法。對於每一個也是可取的,關於有效的Java。 – Christian

5

使用已有的API

Collections.max(arrayList); 

import java.util.ArrayList; 
import java.util.Collections; 

public class Main { 

    public static void main(String[] args) { 

    ArrayList<Integer> arrayList = new ArrayList<Integer>(); 

    arrayList.add(new Integer("3")); 
    arrayList.add(new Integer("1")); 
    arrayList.add(new Integer("8")); 
    arrayList.add(new Integer("3")); 
    arrayList.add(new Integer("5")); 

    Object obj = Collections.max(arrayList); 
    System.out.println(obj); 
    } 
} 

Documentation

你也可以考慮作爲略差解決方案,如果你以後需要排序列表

Collections.sort(arrayList); // Sort the arraylist 
arrayList.get(arrayList.size() - 1); //gets the last item, largest for an ascending sort 

第二種方法可能是有用的。