# Wochentag berechnen



## AP2000 (5. Mai 2016)

Hallo!

Wie kann ich in diesen Code auch noch einbringen, dass wenn der Wochentag kleiner als 0 ist 7 addiert wird?


```
import java.util.Scanner;

public class WochentagrechnerGregorianisch {
  
    public static void main (String [] arg){
      
        Scanner in = new Scanner(System.in);
      
        System.out.println("Welcher Tag?");    // Tag einlesen
        int tag = in.nextInt();
      
        System.out.println("Welcher Monat?"); // Monat einlesen
        int monat = in.nextInt();
      
        System.out.println("Welches Jahr?"); // Jahr einlesen
        int jahr = in.nextInt();
      
        if (monat < 3){                // Ist der Monat kleiner drei, dann...
            jahr = jahr - 1;        // Jahr zurücksetzen
            monat = monat + 12;        // Monat zwei addieren
        }
      
        int wochentag = 0;
        int jahrAnfang = jahr / 100;  // die Jahrhundertzahlen
        int jahrEnde = jahr % 100;         // die letzten beiden Zahlen
      
      
        if (jahrAnfang > 15 && jahrEnde > 82) {    // gregorianischer Kalender
            wochentag = (tag + ((monat++) * 26 / 10) + jahrEnde + (jahrEnde / 4) + (jahrAnfang / 4) - 2 * jahrAnfang) % 7;    // Zeller Formel
        } else if (jahrAnfang < 15 && jahrEnde < 82){    //julianischer Kalender
            wochentag = (tag + ((monat++) * 26 / 10) + jahrEnde + (jahrEnde / 4) + 5 - jahrAnfang) % 7;
        }
      
      
        switch (wochentag){
        case 0:
            System.out.println ("War nen Samstag");
            break;
        case 1:
            System.out.println("War nen Sonntag");
            break;
        case 2:
            System.out.println("War nen Montag");
            break;
        case 3:
            System.out.println("War nen Dienstag");
            break;
        case 4:
            System.out.println("War nen Mittwoch");
            break;
        case 5:
            System.out.println("War nen Donnerstag");
            break;
        case 6:
            System.out.println("War nen Freitag");
            break;
        default:
            System.out.println("Gibts nicht");
            break;
          
        }
          
    }
  

}
```
Danke


----------



## InfectedBytes (5. Mai 2016)

ernsthaft? 

```
if(wochentag < 0) wochentag+=7;
```


----------



## WetWer (6. Mai 2016)

Wieso so kompliziert mein Freund...

Benutze doch das SimpleDateFormat mit dem Date. Ist super simpel. Gibt zB: simpleDateFormat.



SimpleDateFormat dayAusgeschrieben = new SimpleDateFormat( "EEEE" );
// Objekt für ausgabe EEEE=Wochentag
SimpleDateFormat dateFormatieren = new SimpleDateFormat( "dd/MM/yyyy" );
// Objekt für eingabe gib hier dein datum ein dd = tag, MM = Monat, yyyy = Jahr
Date date = new Date();
date = idateFormat.parse( 6+ "/" + 5+ "/" + 2016 );
System.out.println("War nen " + dayAusgeschrieben.format( date ));

Hoffentlich vereinfacht dir das dein Auftrag etwas...

LG Wetwer


----------



## AP2000 (6. Mai 2016)

@WetWer

Vielen Dank!

Du, ich bin richtige Anfängerin: muss ich da etwas importieren?


----------



## WetWer (6. Mai 2016)

@AP2000 ganz simpel nur diese drei Imports:

importjava.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


lg Wetwer


----------



## AP2000 (6. Mai 2016)

Vielen Dank!


----------



## JStein52 (6. Mai 2016)

AP2000 hat gesagt.:


> muss ich da etwas importieren?


Benutzt du Eclipse oder NetBeans ?  Die suchen dir die richtigen Imports auch raus wenn du sie nett darum bittest, sprich wenn du ihren Lösungsvorschlag akzeptierst für die anfänglich rot markierten Fehler.


----------



## WetWer (9. Mai 2016)

@JStein52


JStein52 hat gesagt.:


> wenn du sie nett darum bittes


In IntelliJ werden sie automatisch importiert...
Eclipse ist... naja->http://www.ihateeclipse.com/


----------



## AP2000 (10. Mai 2016)

```
import java.util.Scanner;

public class WochentagrechnerGregorianisch {
    public static void main (String [] arg){
   
        Scanner in = new Scanner(System.in);
   
        System.out.println("Welcher Tag?");    // Tag einlesen
        int tag = in.nextInt();
   
        System.out.println("Welcher Monat?"); // Monat einlesen
        int monat = in.nextInt();
   
        System.out.println("Welches Jahr?"); // Jahr einlesen
        int jahr = in.nextInt();
   
        if (monat < 3){                // Ist der Monat kleiner drei, dann...
            jahr = jahr - 1;        // Jahr zurücksetzen
            monat = monat + 12;        // Monat zwei addieren
        }
   
        int wochentag = 0;
        int jahrAnfang = jahr / 100;  // die Jahrhundertzahlen
        int jahrEnde = jahr % 100;         // die letzten beiden Zahlen
   
   
        if (jahrAnfang > 15 && jahrEnde > 82) {    // gregorianischer Kalender
            wochentag = (tag + ((monat++) * 26 / 10) + jahrEnde + (jahrEnde / 4) + (jahrAnfang / 4) - 2 * jahrAnfang) % 7;    // Zeller Formel
        } else if (jahrAnfang < 15 && jahrEnde < 82){    //julianischer Kalender
            wochentag = (tag + ((monat++) * 26 / 10) + jahrEnde + (jahrEnde / 4) + 5 - jahrAnfang) % 7;
        }
   
   
        if (wochentag < 0) wochentag+=7;
     
        switch (wochentag){
        case 0:
            System.out.println ("War nen Samstag");
            break;
        case 1:
            System.out.println("War nen Sonntag");
            break;
        case 2:
            System.out.println("War nen Montag");
            break;
        case 3:
            System.out.println("War nen Dienstag");
            break;
        case 4:
            System.out.println("War nen Mittwoch");
            break;
        case 5:
            System.out.println("War nen Donnerstag");
            break;
        case 6:
            System.out.println("War nen Freitag");
            break;
        default:
            System.out.println("Gibts nicht");
            break;
       
        }
       
    }

}
```

Wenn ich das dann so mache, kommt bei mir immer Samstag raus. Weiß jmd wieso?

Danke


----------



## Flown (10. Mai 2016)

Das nächste mal den Code bitte in Code-Tags schreiben:[code=java]//JAVA CODE HERE[/code]

Aber es liegt vielleicht am Postfix-Inkrement: `monat++`. Da solltest du mal näher hinsehen!


----------



## VfL_Freak (11. Mai 2016)

Moin,

überleg' Dir mal genau, was Deine if-Bedingung macht!!

```
if (jahrAnfang > 15 && jahrEnde > 82)
{
    // ...
} else if (jahrAnfang < 15 && jahrEnde < 82)
{
    // ...
}
```
Du fängst hier genau zwei Fälle, aber was ist mit allen anderen ??
etwa: 'jahrAnfang == 15 && jahrEnde == 82' / 'jahrAnfang > 15 && jahrEnde < 82' usw.
Da bleibt Dein Wochentag halt '0', so wie initialisiert!!

Du musst schon wirklich ALLE Fälle abhandeln (dann vlt. besser mit 'switch-case')!

Gruß Klaus


----------

