Jak udoskonalić kalendarz?

0

Stworzylem taki prowizoryczny kalendarz który kazdy miesiac ma 31 dni z metodą przesuwania go o tydzien,chcialbym aby kazdy miesiac mial odpowiednią ilosc dni. Pod drugie, ktos zna lepszy sposob na odczytywanie daty czy ten wystarczy?

package kalendarz;

public class data {
    private int dzien,miesiac,rok; 

    public int getDzien() {
        return dzien;
    }

    public void setDzien(int dzien) {
       if(dzien<31){
        this.dzien = dzien;
       }
       if(dzien>=31){
       this.dzien=0;
       }
    }

    public int getMiesiac() {
        return miesiac;
    }

    public void setMiesiac(int miesiac) {
       if(miesiac<=12){
        this.miesiac = miesiac;
       }
       if(miesiac>12){
       this.miesiac=0;
       }
    }

    public int getRok() {
        return rok;
    }

    public void setRok(int rok) {
        this.rok = rok;
    }
    
    
    public data(int dzien, int miesiac, int rok){
    this.setDzien(dzien);
    this.setMiesiac(miesiac);
    this.setRok(rok);
    }
    
    public void Up(){
     
        dzien=dzien+7;
        if(dzien>31){  miesiac++; 
        dzien=dzien-31;
        }
        if(miesiac>12){
            miesiac=miesiac-12;
        rok++;
        }
        }
    
    public void Down(){
    dzien=dzien-7;
    if(dzien<1){
    miesiac--;
    dzien=dzien+31;
    }
    if(miesiac<1){
    miesiac=miesiac+12;
    rok--;
    }
    }
    
    public void Pokaz(){
    System.out.println("Dzien "+dzien+" Miesiac "+miesiac+" Rok "+rok);
    }
}


Klasa główna.

package kalendarz;

public class Kalendarz {

   
    public static void main(String[] args) {
     data kalendarz = new data(28,12,2015);
    kalendarz.Pokaz();
     kalendarz.Up();
     kalendarz.Pokaz();
     kalendarz.Down();
     kalendarz.Pokaz();
      }
    
}

Wynik:

Dzien 28 Miesiac 12 Rok 2015
Dzien 4 Miesiac 1 Rok 2016
Dzien 28 Miesiac 12 Rok 2015
0

Wyrzuć ten kod i opisz słownie co chcesz, aby Twój kalendarz robił, w miarę możliwości dokładnie.

0

Kod sie moze przydac. Chce aby kazdy miesiac mial odpowiednią ilość dni (30,31).

1

Głupi pomysł żeby operować na intach, gdy są gotowe typy, które zawierają takie info jak ilość dni w miesiącu, po dacie od razu wiadomo czy to poniedziałek, wtorek itp. takie rzeźbienie jak ty robisz nie ma sensu.
Zapoznaj się z api dla daty, które weszło w javie 8 i operuj na LocalDate.
http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html
Są jeszcze inne typy javowe do operowania na czasie np. Calendar, ale polecam ten z javy 8.

0

@szarotka Tak oczywiscie sie z toba zgadzam, aczkolwiek w moim zadaniu nie mam tych materiałów objetych, wiec chcialem cos wyrzezbic.

0

Może lekkie utrudnianie sobie życia, ale możesz zrobić tablicę z ilością dni w miesiącu :P

0

Poszukałabym prawidłowości matematycznej odnośnie liczby dni.Dla liczb nieparzystych od 1 do 7 miesiące mają 31 dni potem mają je dla parzystych od 8 do 12. Wszystkie inne miesiące z wyjątkiem lutego mają 30. Zapisałabym to warunkami lub najlepiej znalazłabym funkcje która działała by tak jak powyżej. Rozumiem tutaj funkcje w rozumieniu matematycznym tak jak funkcja liniowa czy wykładnicza.

1
private int howManyDaysInMonth(int month, int year){
    days = 0; 
    switch(month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            days = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
           days = 30;
           break;
        case 2:
           if(isLeapYear(year)){
               days = 29;
           }else{
               days = 28;
           }
    }
    return days;
}
private boolean isLeapYear(int year){
   if(year%4 == 0 && !year%100 == 0){
       return true;
   }
   if(year%400 == 0){
       return true;
   }
   return false;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1