2012-10-08 41 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 

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