6

ArrayList で最大値を見つけようとするための 2 つの異なる関数があります。それらが同じ値を返すかどうかを最初に見てから、パフォーマンス時間を2つ持っています。

ただし、それらは同じ値を再現していますが、最大かどうかに関係なく、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 );
4

2 に答える 2

9

既存の 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);
  }
}

ドキュメンテーション

少し悪い解決策と見なすこともできます

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

後で並べ替えられたリストが必要になる場合は、2 番目の方法が役立ちます。

于 2014-12-16T14:03:36.277 に答える
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);
}
于 2012-10-08T19:34:15.917 に答える