Witam.
Czy zna ktoś metodę zwracającą liczbę dni w miesiącu w zależności od roku?
Np. Styczeń 2002 rok podaje jako dane i powinno wyświetlić mi 31 dni.
0
0
Na przykład:
Calendar kalendarz = new GregorianCalendar(1999, Calendar.FEBRUARY, 1);
int dniMiesiac= kalendarz.getActualMaximum(Calendar.DAY_OF_MONTH); // daje 28
Z latami przestępnymi dla lutego nie ma problemu bodajże.
0
Nie rozumiem czemu ale dla takiego kodu nie działa mi poprawnie.
int year = 2002;
String month = "styczeń";
MonthInYear month = new MonthInYear(month, year);
int ldni = month.getDays()
System.out.println("Miesiąc " + month + " w roku " + year + " zawiera " + ldni);
chciałbym też zaznaczyć że ma być nu użyta enumeracja.
Oczywiście wiem że jest konflikt zmiennych.
0
Pytanie kierujesz do wróżki? Podaj kod konstruktora MonthInYear(month, year) i metody getDays().
0
private int rok;
private String miesiac;
public MonthInYear(){}
public MonthInYear(String m, int r){
rok = r;
miesiac = m;
}
I właśnie o metodę getDays() mi chodzi
0
import java.util.*;
public enum Month
{
STYCZEŃ(0),LUTY(1),MARZEC(2),KWIECIEŃ(3),MAJ(4),CZERWIEC(5),LIPIEC(6),
SIERPIEŃ(7),WRZESIEŃ(8),PAŹDZIERNIK(9),LISTOPAD(10),GRUDZIEŃ(11);
int month;
public static void main(String[] args)
{
for(int rok=2012;rok<=2013;rok++)
{
for(Month month: Month.values())
{
System.out.println("Rok: "+rok+" miesiąc: "+month+" dni: "+getDays(rok,month.month()));
}
}
}
Month(int month)
{
this.month = month;
}
private int month()
{
return this.month;
}
private static int getDays(int rok,int m)
{
Calendar kalendarz = new GregorianCalendar(rok, m, 1);
return kalendarz.getActualMaximum(Calendar.DAY_OF_MONTH);
}
}
0
przepraszam a czy mi się wydaje czy tylko w lutym może być różna ilość dni w zależności od roku? bo wtedy z palca możesz wpisać 11 wartości a 12 zrobić dzielenie modulo przez 4
0
Niezupełnie masz rację:
- dzielenie przez 4 numeru roku nie wystarczy - reguła jest bardziej skomplikowana,
- klasa GregorianCalendar (wbrew nazwie) obejmuje też czas obowiązywania kalendarza juliańskiego - wtedy reguła ustalania lat przestępnych była inna obecnie,
- czy Twoje rozwiązanie będzie krótsze od tego:
Calendar kalendarz = new GregorianCalendar(rok, m, 1);
return kalendarz.getActualMaximum(Calendar.DAY_OF_MONTH);