這是用BlueJ編碼的!用HashSet中的Collection.max()獲得最高值
嗨,大家好,我正在嘗試在HashSet中查找最大值。我試圖使用Collection.max方法,但它不適合我。我收到一個錯誤:找不到適用於max(int)的方法。錯誤發生在我的VerhuurderBedrijf類中,這是最後一種叫做getLongestRentPeriod的方法。
我有2個班,(它是荷蘭語)VerhuurderBedrijf和容器。 在Container類中,我有一個名爲differenceInDays的方法。這裏它計算startDate和endDate之間的天數差(請參閱Container類中的字段)。
在VerhuurderBedrijf中,我將Container對象添加到HashSet中。在我的getLongestRentPeriod中,我試圖找到在我的differenceInDays方法(Container類)中計算出的最高值。
可以說我在VerhuurderBedrijf類中添加了2個容器對象。
容器1 - startDate = 10-10-2014; endDate = 15-10-2014;
容器2 - startDate = 10-10-2014; endDate = 20-10-2014;
正如我所說的,在天差我differenceInDatys方法(Container類)計算/
所以我getLongestRentPeriode(verhuurderbedrijf類),我想獲得最高的價值,那爲11天(容器2 );
對不起,如果不清楚。我不善於解釋事物。
這裏是完整的代碼。
VerhuurderBedrijf類
import java.util.*;
import java.text.DecimalFormat;
public class VerhuurderBedrijf
{
private HashSet<Container> containerList;
// Decimalen object
DecimalFormat df;
/**
* Constructor for objects of class VerhuurderBedrijf
*/
public VerhuurderBedrijf()
{
containerList = new HashSet<Container>();
// Dit zorgt ervoor dat er 2 decimalen achter de komma komen
df = new DecimalFormat("0.00");
}
public void addContainer(Container container)
{
// Voegt een container toe een de HashSet<Container>
containerList.add(container);
}
public void gettotalIncome()
{
double total = 0;
for(Container container : containerList)
{
total += container.getIncome();
}
System.out.println("The total amount of income for the rented containers are:\r\n " + (df.format(total)) + " euros.\r\n");
}
public void getAverageVolume()
{
double average = 0;
double calc = 0;
for(Container container : containerList)
{
average += container.getVolume();
calc = average/containerList.size();
}
System.out.println("The average volume of the rented container are:\r\n " + (df.format(calc)) + ".\r\n");
}
public void getLongestRentPeriod()
{
for(Container container : containerList)
{
System.out.println("max : " + Collections.max(container.differenceInDays()));
}
}
}
容器類
import java.text.SimpleDateFormat;
import java.util.Date;
public class Container
{
private int volume;
private String startDate;
private String endDate;
// Tijd object
SimpleDateFormat format;
public Container(int volume, String startDate, String endDate)
{
this.volume = volume;
this.startDate = startDate;
this.endDate = endDate;
// Dit zet de datum om naar een ddmmjjjj formaat, zo is het mogelijk om bijv: 12102014 in te vullen
format = new SimpleDateFormat("ddMMyyyy");
}
public int getCosts()
{
int cost1 = 60;
int cost2 = 125;
if(volume <= 2)
{
// Als de volume kleiner of gelijk is aan 2, zijn de kosten voor de container 60 euro
return cost1;
}
else
{
// Anders zijn de kosten voor de container 125 euro
return cost2;
}
}
public int differenceInDays()
{
int startDateCheck = Integer.parseInt(startDate);
int endDateCheck = Integer.parseInt(endDate);
if(startDateCheck > endDateCheck)
{
// Als er een verkeerde invoer wordt gedaan
System.out.println("Your end date cannot be earlier than your start date");
}
else
{
// Try & Catch omdat er een error ParseException komt, Date is een long in plaats van een String
try
{
String start = startDate;
String end = endDate;
Date day1 = format.parse(start);
Date day2 = format.parse(end);
long difference = day2.getTime() - day1.getTime();
/*
Verschil in de dagen die hierboven wordt uitgerekend, wordt hier omgezet naar de aantal
dagen. 24 = uren, 60 = minuten, 60 = seconden, 1000 = milliseconden
*/
long differenceInDays = difference/(24 * 60 * 60 * 1000) + 1;
// Hier cast ik het naar een int, omdat het een public int methode is
int castToInt = (int) differenceInDays;
return castToInt;
}
catch(Exception e)
{
e.printStackTrace();
}
}
return 0;
}
public int getIncome()
{
int rent = 40;
// (Huur container * de ingevoerde volume) + (Huur container * verschil in de dagen)
int income = (rent * volume) + (rent * differenceInDays());
return income;
}
public int getVolume()
{
return volume;
}
}
我也嘗試過這一點,但它不工作要麼。我得到72的值,最新的數字不是正確的。
public void getLongestRentPeriod()
{
int temp = 0;
for(Container container : containerList)
{
if(temp < container.differenceInDays())
{
temp = container.differenceInDays();
}
//System.out.println("max : " + Collections.max(container.differenceInDays()));
}
System.out.println("max: " + temp);
}
任何人都可以給我一些提示或建議的解決方案?謝謝。
這就是我想要找什麼,但你的解決方案是不是爲我工作。它說:找不到符號變量comparatorComparingContainersByDifferenceInDays。我不太明白這行代碼壽。 – SC92 2014-11-02 16:06:54
你應該寫一個比較器,它需要兩個容器,並通過它們的天差來比較它們。看看javadoc。 Google用於「比較Java中的對象」。看看Collections.max()的javadoc。 –
2014-11-02 17:10:57