# maximale Anzahl der Tage im Monat



## Gast2 (22. Dez 2011)

Hallöle!

Wie bekomme ich die maximale *Anzahl der Tage pro Monat* heraus?
Besonders interessant ist das natürlich bei dem Februar.

Ich habe mich mit den Calender-Funktionen schon etwas beschäftigt, 
aber bin dabei nicht zum Ziel gekommen.

Auch folgender (und ähnliche) Quelltext führte mich nicht zum Ziel:

```
Calendar cal = Calendar.getInstance();
System.out.println(cal.getActualMaximum(1)); // 1 für Februar, nullterminiert
```

Weiß jemand was dazu?

LG! Frank


----------



## ARadauer (22. Dez 2011)

```
Calendar cal = new GregorianCalendar();
        cal.set(Calendar.MONTH, Calendar.FEBRUARY);
        System.out.println(cal.getActualMaximum(Calendar.DATE)); //das ist jetzt 2011
        cal.set(Calendar.YEAR, 2012);
        System.out.println(cal.getActualMaximum(Calendar.DATE)); //das ist jetzt 2012, ein schaltjahr..
```

 public int getActualMaximum(int field) {

field nicht month... Calendar ist eine furchtbare Klasse...


----------



## Andgalf (22. Dez 2011)

ARadauer hat gesagt.:


> field nicht month... Calendar ist eine furchtbare Klasse...



Deshalb empfehle ich immer Joda zu verwenden


----------



## Gast2 (22. Dez 2011)

Sehr cool!

Danke schön!
Danke!
Danke!

:toll:              :applaus:


----------



## JimmyFly (24. Apr 2012)

wäre es möglich das jemand den ganzen Quelltext mal online stellt?


----------



## ARadauer (24. Apr 2012)

Was fehlt dir... die main oder die imports?


```
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Test {

    public static void main(String[] args) {
        Calendar cal = new GregorianCalendar();
        cal.set(Calendar.MONTH, Calendar.FEBRUARY);
        System.out.println(cal.getActualMaximum(Calendar.DATE));
    }
}
```


----------



## JimmyFly (24. Apr 2012)

beides irgendwie ich hatte versucht das Programm zusammen zustellen aber er gibt mir nur Fehler aus


----------



## JimmyFly (24. Apr 2012)

meine definitive Aufgabenstellung lautet: 

_Schreiben Sie ein Java-Programm, welches für einen gegebenen Monat die Anzahl seiner Tage
anzeigt. Der Monat soll durch Eingabe des Jahres und der Monatsangabe – von 1 (Januar) bis 12
(Dezember) – spezifiziert werden. Berücksichtigen Sie Schaltjahre (siehe Aufgabe 1c).
Das Programm soll dem Nutzer die Möglichkeit geben, eine weitere Berechnung durchzuführen oder
das Programm zu beenden._


----------



## bone2 (24. Apr 2012)

```
public static void main(String[] args) {
        System.out.println(getLastDayOfMonth(2010, 2));
        System.out.println(getLastDayOfMonth(2011, 2));
        System.out.println(getLastDayOfMonth(2012, 2));
    }


    private static int getLastDayOfMonth(int year, int month) {
        int februar = 1/(month%2*2 + month/2) * (2 - 1/(year%4+1) + 1/(year%100+1) - 1/(year%400+1));

        return 30 + month/8 + month%2 - (month/8 * month%2 * 2) - februar;
    }
```
mathe. calendar-frei

ne while schleife und nen scanenr in main einzubaun solltest du ja hinbekommen, wenn nicht, code zeigen, der fehler wirft


----------



## JimmyFly (24. Apr 2012)

er gibt mir aber ein Fehler bei diesem Programm aus: 

_Demo.java:13: reached end of file while parsing
    }
     ^
1 error
_


----------



## JimmyFly (24. Apr 2012)

wie wird die while schleife eingebaut? 


Scanner so deklarieren? 

_Scanner in = new Scanner(System.in);

   System.out.println("Eingabe des Monats ");
    Februar = in.nextInt();_


----------



## bone2 (24. Apr 2012)

laut deiner aufgabenstellung brauchst du 2 eingaben und nicht einmal ne schleife, war vorgegriffen.

in der main lässt du monat und jahr eingeben, dann rufts du mit den 2 ints, meine methode von oben auf und bekommst die monatstage zurück

mein code war kein vollständiges programm, guck dir mal die grund grundlagen an...


----------



## JimmyFly (24. Apr 2012)

```
import java.util.Scanner;
public class Test {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);
int month; 
int year;
        System.out.println(getLastDayOfMonth(2010, 2));
        System.out.println(getLastDayOfMonth(2011, 2));
        System.out.println(getLastDayOfMonth(2012, 2));
    }
 
 
    private static int getLastDayOfMonth(int year, int month) {
        int februar = 1/(month%2*2 + month/2) * (2 - 1/(year%4+1) + 1/(year%100+1) - 1/(year%400+1));
 
        return 30 + month/8 + month%2 - (month/8 * month%2 * 2) - februar;
    }
```


ist das so gemeint?


----------



## JimmyFly (24. Apr 2012)

```
import java.util.Scanner;
public class Test {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);
int month; 
int year;

System.out.println("Eingabe des Monats ");
    month = in.nextInt();
    System.out.println("Eingabe des Jahr ");
    year = in.nextInt();
    
    int getLastDayOfMonth; 
    
        System.out.println(getLastDayOfMonth(2010, 2));
        System.out.println(getLastDayOfMonth(2011, 2));
        System.out.println(getLastDayOfMonth(2012, 2));
    }
 
 
    private static int getLastDayOfMonth(int year, int month) {
        int februar = 1/(month%2*2 + month/2) * (2 - 1/(year%4+1) + 1/(year%100+1) - 1/(year%400+1));
 
        return 30 + month/8 + month%2 - (month/8 * month%2 * 2) - februar;
    }
```


ich hatte noch was vergessen


----------



## bone2 (24. Apr 2012)

Kapitel 28 — Methodenaufruf mit Parametern ...


```
public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int month;
        int year;

        System.out.println("Eingabe des Monats ");
        month = in.nextInt();
        System.out.println("Eingabe des Jahr ");
        year = in.nextInt();


        System.out.println(getLastDayOfMonth(year, month));
    }
```


----------



## JimmyFly (24. Apr 2012)

danke


----------



## JimmyFly (24. Apr 2012)

Kann ich die restlichen Monate mit einer if Bdeingung aufrufen? 


```
if (month == 1) {
        
        System.out.println("31 Tage");
 }
```


----------



## bone2 (24. Apr 2012)

restliche monate? hä?


```
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Eingabe des Jahr ");
        int year = in.nextInt();

        for (int month = 1; month <= 12; month++) {
            System.out.println(getLastDayOfMonth(year, month) + " Tage");    
        }
    }
```


----------



## JimmyFly (24. Apr 2012)

ja ich habe es jetzt einwenig anders gelöst ... da ich eine falsche Eingabe auch noch abfangen wollte


----------

