Hilfe bei Wochentagberechnung...



  • Hallo Leute, ich habe versucht die Wochentagsberechnung ab dem 1.1.1601 zu programmieren doch ich komme nicht auf den fehler, wahrscheinlich liegt es an der Berechnung, ich hoffe ihr findet den fehler:

    import Prog1Tools.IOTools;
    
    public class Aufgabe13
    {
    	public static void main(String[] args)
    	{
    		System.out.println("Wochentag Berechnung");
    		System.out.println();
    		System.out.println("Geben Sie ein gueltiges Datum ab dem 1. Januar 1601 ein.");
    
    		String eingabe;
    		int tag, monat, jahr;
    		int mo[] = new int[15];		
    
    		System.out.print("Bitte geben Sie den Tag ein: ");
    		tag = IOTools.readInteger();
    		System.out.print("Bitte geben Sie den Monat ein: ");
    		monat = IOTools.readInteger();
    		System.out.print("Bitte geben Sie das Jahr ein: ");
    		jahr = IOTools.readInteger();		
    		System.out.println();
    
    		if(monat==1 || monat==3 || monat==5 || monat==7 || monat==8 || monat==10 || monat==12)
    		{
    			mo[monat] = 31;				
    		}
    		else if(monat==2)
    		{
    			mo[monat] = 28;				
    		}
    		else if(monat==4 || monat==6 || monat==9 || monat==11)
    		{
    			mo[monat] = 30;							
    		}
    
    		if((jahr % 4) == 0 || (jahr % 400) == 0)
    		{
    			mo[2] = 29;
    			System.out.println("Jahr "+jahr+" ist ein Schaltjahr!");
    		}
    
    		System.out.println("Monat ["+monat+"] hat ["+mo[monat]+"] Tage");
    
    		int startJahr = 1601;
    
    		//Eingegebenes Jahr - 1601
    		int x = jahr - startJahr;
    		//Schaltjahre
    		int schaltJahr = x/4;
    		int normalJahr = jahr - schaltJahr;
    		int z = schaltJahr * 366;
    		int y = normalJahr * 365;
    		//day = alle Tage
    		int day = z + y;
    		System.out.println("Schaltjahr:"+schaltJahr);
    		System.out.println("Normal1jahr:"+normalJahr);
    
    		System.out.println("Tage:"+day);
    
    		day = tag + mo[monat];
    		day = day % 7;
    		day = day + normalJahr + (normalJahr/4) - (normalJahr/100) + (normalJahr/400);
    		day = day % 7;
    
    		if(day == 1) System.out.println("Montag");
    		else if(day == 2) System.out.println("Dienstag");
    		else if(day == 3)	System.out.println("Mittwoch");
    		else if(day == 4)	System.out.println("Donnerstag");
    		else if(day == 5) System.out.println("Freitag");
    		else if(day == 6)	System.out.println("Samstag");
    		else if(day == 0)	System.out.println("Sonntag");		 
    
    	}
    }
    


  • Weißt du wie ein Debugger funktioniert?



  • Das bringt mir nix wenn ich nicht richtig weiß wie die berechnugn aussieht!
    Also leute bitte helft mir!



  • kernel64 schrieb:

    Das bringt mir nix wenn ich nicht richtig weiß wie die berechnugn aussieht!

    Du willst was programmieren und weißt nicht wie es berechnet wird??? 😮



  • Dann hilft meistens Googeln oder mal bei Wikipedia vorbeizuschauen: http://de.wikipedia.org/wiki/Wochentagsberechnung



  • Tja schau dir erstam noch mal genau an was du da proggen willst. so wies aussieht hast du da noch grundlegendere probleme.

    a. mit dem prinzipiellen ablauf deines programms.
    b. mit dessen umsetzung in ein programm.

    import Prog1Tools.IOTools;
    
    public class Aufgabe13
    {
        public static void main(String[] args)
        {
            System.out.println("Wochentag Berechnung");
            System.out.println();
            System.out.println("Geben Sie ein gueltiges Datum ab dem 1. Januar 1601 ein.");
    
            String eingabe;
            int tag, monat, jahr;
            int mo[] = new int[15];  //<< wieso 15 Monate? ein Jahr hat nur 12! 
                                     //   Nachtrag ähm ja wir fangen nicht an mit 0 zu zählen. Ah jetzt ja.     
    
            // einlesen von tag, monat und jahr
            System.out.print("Bitte geben Sie den Tag ein: ");
            tag = IOTools.readInteger();
            System.out.print("Bitte geben Sie den Monat ein: ");
            monat = IOTools.readInteger();
            System.out.print("Bitte geben Sie das Jahr ein: ");
            jahr = IOTools.readInteger();       
            System.out.println();
    
            // was soll dieser if construkt ? es wird nur der monat initallisiert, der ausgewählt worden ist.
            // für was sollen diese zahlen verwendet werden?
            if(monat==1 || monat==3 || monat==5 || monat==7 || monat==8 || monat==10 || monat==12)
            {
                mo[monat] = 31;               
            }
            else if(monat==2)
            {
                mo[monat] = 28;               
            }
            else if(monat==4 || monat==6 || monat==9 || monat==11)
            {
                mo[monat] = 30;                           
            }
    
            // Fehler! alles was durch 400 teilbar ist ist auch dirch 4 teilbar somit ist die prüfung Modulo 400 überflüssing.
            // Anschauen wie ein schaltjahr berechnet wird. hier fehlt eine bedingung. 
            // 1900 war kein 2000 war ein schaltjahr wieso nur? 
            // nach deinen bedingungen währe 1900 eines gewesen da mod 4 == 0 ist.
            if((jahr % 4) == 0 || (jahr % 400) == 0)
            {
                mo[2] = 29;
                System.out.println("Jahr "+jahr+" ist ein Schaltjahr!");
            }
    
            System.out.println("Monat ["+monat+"] hat ["+mo[monat]+"] Tage");
    
            int startJahr = 1601;
    
            //Eingegebenes Jahr - 1601
            int x = jahr - startJahr;
            //Schaltjahre
            int schaltJahr = x/4;
            int normalJahr = jahr - schaltJahr; // hier ist wohl auch der wurm drin. 
            int z = schaltJahr * 366;
            int y = normalJahr * 365;
            //day = alle Tage
            int day = z + y;
            System.out.println("Schaltjahr:"+schaltJahr);
            System.out.println("Normal1jahr:"+normalJahr);
    
            // bis hierher sollte wohl die summe der tage für die jahre ab 1601 berechnet worden sein.
    
            System.out.println("Tage:"+day);
    
            // das was jetzt folgt kann ich leider nicht ganz verstehen.
            // sollen hier die monatstage seit anfag des jahres aufaddiert werden?
            day = tag + mo[monat];
            day = day % 7;          // uns interesiert nur der wochentag. MOD 7 ist ok
    
            // was ist das für eine ausgleichsrechnung? Wozu denn eigentlich? Wieo wird eigentlich oben der Februar passend  
            // gesetzt?
            day = day + normalJahr + (normalJahr/4) - (normalJahr/100) + (normalJahr/400);
            day = day % 7;
    
             // ausgabe des wochentags. sieht ok aus, wobei für meinen geschamck es bessere konstrukte dafür geben würde
             // switch case ggf sinvoll?
            if(day == 1) System.out.println("Montag");
            else if(day == 2) System.out.println("Dienstag");
            else if(day == 3)    System.out.println("Mittwoch");
            else if(day == 4)    System.out.println("Donnerstag");
            else if(day == 5) System.out.println("Freitag");
            else if(day == 6)    System.out.println("Samstag");
            else if(day == 0)    System.out.println("Sonntag");         
    
        }
    }
    

    wenn ich jetzt den alg nicht ganz verstanden hab dann bitte koriegieren. Aber da hier nichts kommentiert ist kann ich nur vermutungen anstellen, was hier gemacht werden soll. ggf kann es ja sein, das hier jemand ganz gemeine implementierungstriks verwendet.

    Ich glaub jetzt hab ich wohl schon zuviel gesagt / geschrieben. ( und hausaufgaben lösen wir eigentlich nie )

    gruss


Anmelden zum Antworten