2017-01-31 11 views
1

私は、実行時間が最も短いと予想していましたが、代わりに最後のエントリーをarrayListに出力します。私は犬のための特定のコースを印刷しようとしています、それはコースコードを入力すると動作します。しかし、最低実行時間は機能しないようです。OOPを使用してarrayListの最小値を印刷する方法は?

例データ

ラズロ12.2

凛34.2

ゆう23.3 - ラズロが優勝犬べきであるとき、これが勝利の犬として印刷されます。

優勝した犬は、実行時間が最も短くなければなりませんが、代わりに最後の読み込み行を取り込んで印刷します。

private void winningDog(String dogsCode) 
{ 
    double runTime = 300; 
    String winningDog = ""; 
    double winningTime = 0; 
    for (Dogs dog: dogsList) 
    { 
     if(runTime > dog.getTotalTime() && (dog.getCourseCode().equalsIgnoreCase(dogsCode))) 
     { 
      winningTime = dog.getTotalTime(); 
      winningDog = dog.getName(); 
     } 

    } 
    System.out.printf("%n%s%17s%20s%1.2f%n", 
      "Winning dog", winningDog,"Time " , winningTime); 

} 
+0

こんにちは!スタックオーバーフローへようこそ!プログラミングの旅では、デバッグは非常に貴重なスキルであることがわかります。最初は、変数を出力することが本当に役に立ちます。私のヒントは、forループの始めに変数を出力することです。 – jeff

答えて

0

あなたがdog.getTotalTime()に負の値を持っていないと仮定すると、あなたはあなたのコード

winningTime = Double.MAX_VALUE; //assigning MAX value to ensure the condition is met at least once(unless all your time values are MAX_VALUE) 

を変更して、あなたの状態を更新することができますよう

if(runTime > dog.getTotalTime().. 

if(winningTime > dog.getTotalTime().. // this would compare winningTime and you're setting the same is the condition matches 
+0

これは動作しますが、代わりに最高の値をとります:( –

+0

@NicoRobinは答えを更新しました – nullpointer

+0

ありがとうございます!どうもありがとうございます。 –

0

基本的には、オブジェクトの最小フィールドを見つけることです。これは、新しいJava 8 Stream APIを使用して1行で行うことができます。

Dogs winningDog = dogsList.stream().min(Comparator.comparingInt(Dogs::getTotalTime)).get(); 

あなたのクラスDogsは、おそらくDogでなければなりません。私はちょうどDogs dog: dogsListと言われているあなたの強化されたfor-loopに基づいて私の回答に基づいています。

.stream().min()の間に追加することで、forループのフィルタを簡単に連鎖させることができます。

+0

私は 'Collections.min()'を使用します。 – shmosel

+0

時間比較のための 'Comparator.comparingDouble()'。 – nullpointer

+0

このコードを使って@shmoselはそれを好きに食っていないようです。以前はCollections.sortを試しましたが、パッケージをインポートしてもエラーが出ました。 –

0
private void winningDog(String dogsCode) { 
    String winningDog = ""; 
    double winningTime = 0; 
    if (dogsList != null) { 
     winningTime = dogsList.get(0).getTotalTime(); 
     winningDog = dogsList.get(0).getName(); 
     if (dogsList.size() > 1) { 
      for (int i = 1; i < dogsList.size(); i++) { 
       if (dogsList.get(i).getTotalTime()< winningTime 
         && (dogsList.get(i).getCourseCode().equalsIgnoreCase(dogsCode))) { 
        winningTime = dogsList.get(i).getTotalTime(); 
        winningDog = dogsList.get(i).getName(); 
       } 

      } 
     } 
    } 
    System.out.printf("%n%s%17s%20s%1.2f%n", "Winning dog", winningDog, "Time ", winningTime); 
} 
+0

しました。それは最低値の代わりに最高値を表示しています。 –

+0

@Hiccup 'if'内のコンパレータ記号が間違っているようです。 '>' – nullpointer

+0

ありがとう@nullpointerです。訂正した – Hiccup

関連する問題