[英]How to get the lowest value in an ArrayList without using 'comparable'
[英]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.