Jesli chesz przechowywac dane w pamieci w wygodny sposob to skorzystaj z mapy.
Prawdopodobnie dane sa wyeksportowane z jakiegos Excela lub cos w tym stylu. Rozdzielone sa np znakiem tabulacji, wiec przy wczytywaniu rozbijesz je kozystajac ze StringTokenizer (niedawno byl poruszany jego temat.. jakos w przeciagu 1 miesiaca)
zakladam ze raczej potrafisz wczytac dane z pliku. :/
Z jedenj linijki otrzymujesz dane
Imie Nazwisko / od kiedy pracowal / do kiedy pracowal
skorzystaj z klasy Calendar
. Za pomoca metody
compareTo(Calendar anotherCalendar)
tej klasy otrzymasz roznice w milisekundach pomiedzy zatrudnieniem od dnia do dnia. Mozesz tez stworzyc dwa obiekty Date i odjac je od siebie - rowniez otrzymasz czas w milisekundach.
Otrzymany wynik dzielisz przez 86 400 000 aby otrzymac liczbe dni
dlaczego akurat przez taka liczbe?
1000 msec = 1sec
60sec = 1min
60min = 1godz
24godz = 1 dzien
wiec 1000 * 60 * 60 * 24 = 86 400 000
Mozesz tez sprobowac zrobic to za pomoca Date i SimpleDateFormat ale nie do konca jestem pewien czy sie uda...
masz wiec juz ilosc przepracowanych dni w okresie jednego zatrudnienia.
sprawdzasz czy taki delikwent ktorego odczytales jest juz w mapie. Jak tak to pobierasz ile mial dotychczas i dodajesz po czym ponownie wstawiasz (mapa sama nadpisze), jak nie to wstawiasz go tam i to juz wszystko :]
bedzie to wygladalo np tak.
SortedMap mapCzasPrzepracowany = new TreeMap();
while (plik_ma_jeszcze_jakies_linijki)
{
//tu jakies zmienne nazwisko,dataOd, dataDo
pobierz_delikwenta_i_daty();
Integer CzasWyliczonyPrzedChwila = wylicz_roznice();
if ( mapCzasPrzepracowany.containsKey(Odczytane_Nazwisko) )
{
Integer iCzas = (Integer) mapCzasPrzepracowany.get(Odczytane_Nazwisko);
iCzas += CzasWyliczonyPrzedChwila;
mapCzasPrzepracowany.put(Odczytane_Nazwisko, iCzas);
}
else
{
mapCzasPrzepracowany.put(Odczytane_Nazwisko, CzasWyliczonyPrzedChwila);
}
}
i to wszystko... pozostaje tylko pobierac z mapy kolejne wartosci. klucze otrzymasz z mapy za pomoca metody keySet, choc lepiej bedzie poruszac sie iteratorem (sprowadza sie w rezultacie do tego samego). Mozliwe ze nie korzystales jeszcze z map, wiec polecam sprobowac
Powinienes sie zmiescic z calym kodem w ok 50-70 linijkach :]