2

Java に Float 要素を持つ ArrayList があり、最大値を持つ要素の位置を見つけようとしています。次のコードでこれを実行しようとしましたが、うまくいきませんでした。

 Float obj = Collections.max(arraylist);
    int index=arraylist.indexOf(obj);

問題は、Collections.max()int 値で機能しているように見える が、私の場合は間違った結果を返すことです..

何がうまくいかないのか、どうすればこれを別の方法で行うことができますか?

修正: 問題は私が考えていた場所ではなく、要素を Arraylist に追加するときです。追加する値は、関数の float 結果です。追加する直前に関数の結果を出力し、通常のarraylist.add(value)コードを使用しますが、追加直後に配列リストの値を出力するように要求すると、まったく異なるものが返されます:/

4

3 に答える 3

1

私はそれを見つけました!問題は、関数の結果を float 値に格納してから使用する代わりに、メモリ空間を節約するために値が必要になるたびに関数を呼び出すことでした。ただし、関数の1つの値を初期化するのを忘れていたので、毎回異なる開始値が返されたため、関数を呼び出すたびに異なる結果が返されました..

助けてくれてありがとう、あなたの質問なしでそれを見つけるのにもっと時間がかかったかもしれないので、私の考えを本当の問題に導きました:)

于 2012-11-23T13:17:56.893 に答える
0

IndexOfは、このリストで指定された要素が最初に出現したインデックスを返します。このリストに要素が含まれていない場合は -1 を返し、探している最大値ではありません。

ここでドキュメントを確認してくださいhttp://download.java.net/jdk7/archive/b123/docs/api/java/util/ArrayList.html#indexOf(java.lang.Object )

ArrayList に格納されている要素の型も指定する必要があります。試す :

... new ArrayList<Float>() ; .. 
于 2012-11-23T12:25:38.240 に答える
0

次の両方のライブラリが追加されていることを願っています...

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

このコードを試すことができますか?Float オブジェクトに保存する代わりに、

Object obj = Collections.max(arrayList);
于 2012-11-23T12:26:50.447 に答える