Pracuję nad moim pierwszym większym projektem pt. wypożyczalnia samochodów i natrafiłem na jeden problem. Mianowicie chcę stworzyć metodę, która sprawdza, czy samochód jest wolny w danym okresie. Argumentami metody miałyby być data początku i data końca planowanego wynajmu. W klasie rezerwacja (posiada m.in. atrybuty takie jak pojazd, data startu, data końca) byłoby to porównywane w pętli. Próbowałem rozwiązać ten problem if-ami, ale nie wydaje mi się to profesjonalne. Szukałem trochę w dokumentacji, ale też nie znalazłem gotowej metody, która by mnie ratowała. Czy ktoś jest w stanie zaproponować jakieś rozwiązanie lub podpowiedzieć jak wy rozwiązujecie tego typu problemy?
- Rejestracja:ponad 6 lat
- Ostatnio:9 dni
- Postów:3561
w dwóch porównaniach to daje się zrobić sprawdzenie, czy przedziały (from,to) mają część wspólną.
this.from <= other.to && other.from <= this.to
To jest (dla mnie) nieco w klimacie paradoksów, proste żołnierskie myślenie podpowiada, że trzeba cztery porównania. Też macie podobne intuicyjne podejście? Czasem wyobraźnia zawodzi ....
EDIT. Do tych zawodzących intuicji należy też sprawdzanie każdego pojedynczego dnia w okresie.
W każdym razie, takie wyrażenie w pętli dla każdego Wypożyczenia, lub dla każdego Samochodu, zależnie z jakiej perspektywy szukamy.
- Rejestracja:ponad 7 lat
- Ostatnio:prawie 2 lata
- Postów:90
public Boolean sprawdzCzyWolne(Date dataStartu,Date dataKonca, Date sprawdzData ){
// sprawdzic ile dni mija miedzy data startu a data konca wypozyczenia
// tutaj wstawic petle for ktora bedzie miala tyle powtorzen ile dni miedzy startem a koncem wlacznie
// w petli porownac sprawdzData z tymi dniami pomiedzy
// jesli jest rowne to dac false
// jesi nie to true
}

- Rejestracja:prawie 7 lat
- Ostatnio:ponad 2 lata
- Lokalizacja:74.7261832, -41.7409518
- Postów:151
Metoda statyczna z parametrami Pojazd, data od(Planowany) , date do(Planowany) pobierasz data Startu i date Stopu z obiektu Pojazd.
static boolean checkDate(Pojazd pojazd, Data Od, Data Do)
{
if( Od<=pojazd.getdataKonca() && pojazd.getDataStartu()<=Do )
{
return true;
}
return false;
}


- Rejestracja:ponad 6 lat
- Ostatnio:2 dni
- Postów:296
Nie wiem, czy to profesjonalne rozwiązanie, ale można każdemu pojazdowi przydzielić tablicę typu lookup dla rezerwacji, jedna komórka to jeden dzień, indeks to numer dnia np. roku, wtedy rezerwacja na 4 stycznia to lookup[4]=true, sprawdzenie czy jest wolny w dniu 6 stycznia to odczyt z lookup[6] itd. Problemem jest tylko wyciągnięcie wszystkich wolnych terminów, bo trzeba przeglądać całą tablicę. Aby było jeszcze bardzie "pro", z tablicy robisz bufor cykliczny, indeksy obliczasz względem bieżącego dnia i każdego dnia możesz rezerwować zawsze N dni.
- Rejestracja:około 11 lat
- Ostatnio:ponad 5 lat
- Postów:54
Polecam com.google.common.collect.Range

- Rejestracja:ponad 8 lat
- Ostatnio:ponad 4 lata
- Postów:26
Z tego co pamiętam to LocalDate implementuje interfejs Comperable, a dodatkowo powinny być w samej klasie jeszcze metody isAfter i isBefore, które przyjmują również datę.