Wochentag berechnen

AP2000

Mitglied
Hallo!

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

Java:
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
 
Zuletzt bearbeitet von einem Moderator:
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
 
Java:
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
 
Zuletzt bearbeitet von einem Moderator:
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!
 
Moin,

überleg' Dir mal genau, was Deine if-Bedingung macht!!
Java:
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
 

Zurück
Oben