Rok przestępny i data urodzin ?

anika91
Użytkownik
Użytkownik
Posty: 172
Rejestracja: 11 paź 2009, o 19:54
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 67 razy

Rok przestępny i data urodzin ?

Post autor: anika91 »

Mam napisać program wczytujący dzień, miesiąc i rok urodzin, a następnie ma wyświetlić datę w datę w postaci "pół-słownej". Program powinien kontrolować poprawność wprowadzanych danych. W przypadku wczytania niepoprawnych danych (np. nie można urodzić się 35 dnia miesiąca lub 29 lutego 1900) program powinien wyświetlić stosowny komunikat. Ponadto muszę pamiętać o sprawdzeniu roku przestępnego i idących za tym wniosków...
Napisałam takim program, ale jest on dosyć długi i zastanawia mnie czy nie można tego napisać jakoś prościej/krócej: (program nie jest pełen, ma tylko instrukcję Switch gdy rok jest przestępny.. drugiego już nie pisałam bo by się znacznie wydłużyło.
Dziękuje za pomoc.
Ostatnio zmieniony 8 gru 2009, o 18:35 przez anika91, łącznie zmieniany 1 raz.
movax1
Użytkownik
Użytkownik
Posty: 64
Rejestracja: 3 paź 2009, o 12:15
Płeć: Mężczyzna
Podziękował: 16 razy
Pomógł: 2 razy

Rok przestępny i data urodzin ?

Post autor: movax1 »

Można to zrobić krócej.
Masz 12 miesięcy. Możesz zadeklarować tablicę, która będzie wskazywała, ile dni ma dany miesiąc.
I wówczas na przykład:
ilosc_dni[0]=31; // miesiac o indeksie 0 to styczen - w tablicach indeksuje sie od zera

Zamiast osobno nazywać miesiące, znów możesz utworzyć tablicę ciągu znaków, gdzie np.:
nazwa_miesiaca[0]="styczen";

I wówczas, zamiast takich rozpatrywania wszystkich warunków, zamiast calej instrukcji switch(miesiac) możesz zrobić:

Kod: Zaznacz cały

if (dzien>=1 && dzien<=ilosc_dni[miesiac])
     System.out.println("Data twoich urodzin to:"+dzien+" "+nazwa_miesiaca[miesiac]+" "+rok);
else
     System.out.println("BŁĄD, " + nazwa_miesiaca[miesiac] + " ma max. " + ilosc_dni[miesiac]+ " dni");
A jak zrobiłaś rok nieprzestępny? Tak samo, jak przestępny?
Wystarczy do tego dopisać tylko warunek, zmieniający ilość dni lutego w zależności od roku urodzenia. Najmniej modyfikacji będzie, jak w zależności od roku, zmienisz liczbę dni w lutym:

Kod: Zaznacz cały

  if ((rok % 4==0) && (rok % 100 !=0) || (rok % 400==0)) 
       ilosc_dni[1]=29;
  else
       ilosc_dni[1]=28;
Jakby co, to pisz

pozdrawiam
ODPOWIEDZ