簡體   English   中英

如何使用OOP打印arrayList中的最低值?

[英]How to print the lowest value in an arrayList using OOP?

我期待獲得最低的運行時間,但它會打印出arrayList中的最后一個主進程。 我正在嘗試為狗打印一個特定的課程,這在我輸入課程代碼時有效。 但是,最低運行時間似乎不起作用。

示例數據

拉茲洛12.2

凜34.2

Yu 23.3 - 當Lazlo成為獲勝的狗時,這將被打印為獲勝的狗。

獲勝的狗應該具有最低的運行時間,但它取代了最后一條讀取線並打印出來。

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);

}

你要做的是基本上找到某個對象的最小字段。 您可以使用新的Java 8 Stream API在一行中完成此操作。

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

你的班級Dogs應該是Dog 我只是根據你的增強型for循環開始我的響應,它說Dogs dog: dogsList

通過在.stream().min()之間添加.filter( CONDITIONS ) ,可以很容易地將for循環中的過濾器鏈接到調用中。

假設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
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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM