2
 // Find smallest year
 int pastMin=0;
 int currentMin=ontarioBankInfoInt.get(0);
 int currentMinIndex=0;
 int reps=(ontarioBankInfoInt.size()-1)/3;

 for(int x=0; x<=reps; x++){
   for (int i=0; i<ontarioBankInfoInt.size()-1; i++){
        if (ontarioBankInfoInt.get(i)<currentMin){
            if (ontarioBankInfoInt.get(i)>pastMin){
                currentMin = ontarioBankInfoInt.get(i);
                currentMinIndex = i;     
                pastMin = currentMin;
            }//If End
        }//If End       
   }//For End

   //Add other information  
   yearArray.add(currentMin);
 }//For End

注: reps は、検索に必要な年数です。このコードの目的は、arrayList で最小の年を検索し、それを「yearArray」に追加してから、次の最小の追加を見つけてそれを言う配列に追加し、すすぎ、配列全体で機能するまで繰り返すことです。

私の問題は、常に同じ年に返されることです。なぜ助けになるのかわからないのですか?

ありがとう

4

3 に答える 3

2

再初期currentMin化していないcurrentMinIndexため、これらは最小値に達し、再割り当てされることはありません。

ループ内でそれらを再初期化する必要があります。

for(int x=0; x<=reps; x++){

   int currentMin = Integer.MAX_VALUE;  // Do this here.
   //int currentMinIndex = -1;  // This is never used??

   for (int i=0; i < ontarioBankInfoInt.size() - 1; i++) {
        int value = ontarioBankInfoInt.get(i);
        if (value < currentMin && value > pastMin) {
            currentMin = value;
            //currentMinIndex = i;     
        }
   }

   pastMin = currentMin; // I also think you want this here.
   yearArray.add(currentMin);
}

repsまたは、リストを並べ替えて最初の要素を取得することもできます。

于 2012-06-15T13:15:09.170 に答える
0

これは、最小の int のリストを年ごとに 1 つずつ取得するための、迅速かつ残忍な方法です。

Collections.sort(ontarioBankInfoInt);
List<Integer> yearArray = new ArrayList<Integer>(ontarioBankInfoInt.subList(0, reps));

おそらく、ソートする前に ontarioBankInfoInt の内容を新しい配列にコピーすることをお勧めします (元の順序を維持したい場合)。

もちろん、これは ontarioBankInfoInt に繰り返し値がないことを前提としています。 3年間は代わりに
{ 1,3,2,1,2 }あなたを与えるでしょう{ 1,1,2 }{ 1,2,3 }

値を重複させたくない場合、およびループを使用したくない場合 (およびパフォーマンスが問題にならない場合)、次のことができます。

  1. ontarioBankInfoInt を Set にコピーします (重複を削除します)。
  2. リストに戻ります。
  3. リストを並べ替えます。
  4. 必要な年数のサブリストを取得します。

しかし、真剣に、他の回答で説明されているようにループを使用してください... :)

于 2012-06-15T14:10:36.167 に答える
0

この部分を見てください:

if (ontarioBankInfoInt.get(i)<currentMin){
    if (ontarioBankInfoInt.get(i)>pastMin){
        currentMin = ontarioBankInfoInt.get(i);
        currentMinIndex = i;     
        pastMin = currentMin;
    }
}

最初に内部に入るpastMincurrentMin、同じ値に設定されます。その後、どのような値が よりも小さくも大きくなりcurrentMin得るでしょうか?pastMin

何を達成しようとしているのかは明確ではありませんが、そのため、途中までは一度しか入りません。

于 2012-06-15T13:14:42.693 に答える