Hallo, dies ist mein erster Beitrag im Java Forum. Freue mich hier zu sein und noch einiges zu lernen 
Ich habe eine Aufgabe zu bearbeiten, die lautet:
Welche Freitage im 20. Jahrhundert (also zwischen 1.1.1901 und 31.12.2000) fielen auf einen 13ten ? Schreiben Sie ein Programm, das alle "Freitag der 13te" im angegeben Zeitraum im Format 1900-1-1 (Jahr-Monat-Tag) auf der Konsole ausgibt (eine Ausgabe pro Zeile)!
>> Hierzu zu wissen: "dlp.writeLine()" ist eine Funktion, die in meinem compiler im Ausgabefenster eine Zeile mit dem in den Klammern definierten Inhalt schreibt.
Zusatzinformationen:
Mein Problem:
Ich bekomme eine Ausgabe, allerdings nicht das Richtige Ergebnis.
Vorgehensweise:
In meinem Code bin ich zuerst jedes Jahr und alle Monate durchgegangen und habe dann gefragt, ob es ein Schaltjahr ist oder nicht.
Jetzt frage ich welcher Monat es ist, damit ich weiß wie viele Tage ich zählen muss.
Dann gehe ich jeden Tag durch und Frage jedes mal, ob der momentane Tag ein Freitag der 13. ist.
Der Name des Tages wird mit der Variable "Tagname" definiert, welche von 1 bis 7 geht
(Also 1=Montag, 7=Sonntag), die dann wieder bei 1 anfängt, sobald 7 überschritten ist.
Habe alles entsprechend im Code Kommentiert.
Frage:
Wer findet den Fehler?
Habe ihr eine andere / bessere Lösung? - Ich finde meine nicht optimal, das muss doch einfacher gehen?
Ich freue mich auf alle Antworten und Miträtselnden Teilnehmer
Ich habe eine Aufgabe zu bearbeiten, die lautet:
Welche Freitage im 20. Jahrhundert (also zwischen 1.1.1901 und 31.12.2000) fielen auf einen 13ten ? Schreiben Sie ein Programm, das alle "Freitag der 13te" im angegeben Zeitraum im Format 1900-1-1 (Jahr-Monat-Tag) auf der Konsole ausgibt (eine Ausgabe pro Zeile)!
>> Hierzu zu wissen: "dlp.writeLine()" ist eine Funktion, die in meinem compiler im Ausgabefenster eine Zeile mit dem in den Klammern definierten Inhalt schreibt.
Zusatzinformationen:
- der 1.1.1900 ist ein Schaltjahr und war ein Montag
- April, Juni, September und November haben 30 Tage
- Januar, März, Mai, Juli, August, Oktober und Dezember haben 31 Tage
- der Februar hat in normalen Jahren 28 Tage und in Schaltjahren 29 Tage
- Schaltjahre sind alle durch 4 teilbaren Jahre - außer das Jahr ist auch durch 100, aber nicht durch 400 teilbar >> ???Kapier ich nicht???
Mein Problem:
Ich bekomme eine Ausgabe, allerdings nicht das Richtige Ergebnis.
Vorgehensweise:
In meinem Code bin ich zuerst jedes Jahr und alle Monate durchgegangen und habe dann gefragt, ob es ein Schaltjahr ist oder nicht.
Jetzt frage ich welcher Monat es ist, damit ich weiß wie viele Tage ich zählen muss.
Dann gehe ich jeden Tag durch und Frage jedes mal, ob der momentane Tag ein Freitag der 13. ist.
Der Name des Tages wird mit der Variable "Tagname" definiert, welche von 1 bis 7 geht
(Also 1=Montag, 7=Sonntag), die dann wieder bei 1 anfängt, sobald 7 überschritten ist.
Habe alles entsprechend im Code Kommentiert.
Frage:
Wer findet den Fehler?
Habe ihr eine andere / bessere Lösung? - Ich finde meine nicht optimal, das muss doch einfacher gehen?
Code:
var tag;
var monat;
var jahr;
var Tagname = 1; //Tagname=1 ist Montag, Tagname=7 ist Sonntag
for (jahr=1900; jahr<=2000; jahr++) {
for (monat=1; monat<=12; monat++) {
//Schaltjahr JA
if (jahr%4===0) {
//Monat hat 31 Tage
if (monat==1||monat==3||monat==5||monat==7||monat==8||monat==10||monat==12) {
for (tag=1; tag<=31; tag++) {
//Check Freitag, 13.
if (Tagname==5 && tag==13) {
dlp.writeLine(jahr + "-" +monat+ "-" +tag);
}
Tagname++;
if (Tagname==8) {Tagname=1;}
}
}
//Monat hat 30 Tage
if (monat==4 || monat==6 || monat==9 || monat==11) {
for (tag=1; tag<=30; tag++) {
//Check Freitag, 13.
if (Tagname==5 && tag==13) {
dlp.writeLine(jahr + "-" +monat+ "-" +tag);
}
Tagname++;
if (Tagname==8) {Tagname=1;}
}
}
//Monat ist Februar mit 29Tagen
if (monat==2) {
for (tag=1; tag<=29; tag++) {
//Check Freitag, 13.
if (Tagname==5 && tag==13) {
dlp.writeLine(jahr + "-" +monat+ "-" +tag);
}
Tagname++;
if (Tagname==8) {Tagname=1;}
}
}
}
// Schaltjahr NEIN
else {
//Monat hat 31 Tage
if (monat==1||monat==3||monat==5||monat==7||monat==8||monat==10||monat==12) {
for (tag=1; tag<=31; tag++) {
//Check Freitag, 13.
if (Tagname==5 && tag==13) {
dlp.writeLine(jahr + "-" +monat+ "-" +tag);
}
Tagname++;
if (Tagname==8) {Tagname=1;}
}
}
//Monat hat 30 Tage
if (monat==4 || monat==6 || monat==9 || monat==11) {
for (tag=1; tag<=30; tag++) {
//Check Freitag, 13.
if (Tagname==5 && tag==13) {
dlp.writeLine(jahr + "-" +monat+ "-" +tag);
}
Tagname++;
if (Tagname==8) {Tagname=1;}
}
}
//Monat ist Februar mit 28Tagen
if (monat==2) {
for (tag=1; tag<=28; tag++) {
//Check Freitag, 13.
if (Tagname==5 && tag==13) {
dlp.writeLine(jahr + "-" +monat+ "-" +tag);
}
Tagname++;
if (Tagname==8) {Tagname=1;}
}
}
}
}
}
AUSGABE
------------------------------------------------------------------------------
1900-13-9
1900-13-12
1901-13-6
1902-13-2
1902-13-3
1902-13-11
1903-13-8
1904-13-10
1905-13-4
1905-13-7
1906-13-9
1906-13-12
1907-13-6
1908-13-2
1908-13-8
1909-13-5
1910-13-1
1910-13-10
1911-13-4
1911-13-7
1912-13-6
1913-13-2
1913-13-3
1913-13-11
1914-13-8
1915-13-5
1916-13-1
1916-13-4
1916-13-7
1917-13-9
1917-13-12
1918-13-6
1919-13-2
1919-13-3
1919-13-11
1920-13-5
1921-13-1
1921-13-10
1922-13-4
1922-13-7
1923-13-9
1923-13-12
1924-13-3
1924-13-11
1925-13-8
1926-13-5
1927-13-1
1927-13-10
1928-13-9
1928-13-12
1929-13-6
1930-13-2
1930-13-3
1930-13-11
1931-13-8
1932-13-10
1933-13-4
1933-13-7
1934-13-9
1934-13-12
1935-13-6
1936-13-2
1936-13-8
1937-13-5
1938-13-1
1938-13-10
1939-13-4
1939-13-7
1940-13-6
1941-13-2
1941-13-3
1941-13-11
1942-13-8
1943-13-5
1944-13-1
1944-13-4
1944-13-7
1945-13-9
1945-13-12
1946-13-6
1947-13-2
1947-13-3
1947-13-11
1948-13-5
1949-13-1
1949-13-10
1950-13-4
1950-13-7
1951-13-9
1951-13-12
1952-13-3
1952-13-11
1953-13-8
1954-13-5
1955-13-1
1955-13-10
1956-13-9
1956-13-12
1957-13-6
1958-13-2
1958-13-3
1958-13-11
1959-13-8
1960-13-10
1961-13-4
1961-13-7
1962-13-9
1962-13-12
1963-13-6
1964-13-2
1964-13-8
1965-13-5
1966-13-1
1966-13-10
1967-13-4
1967-13-7
1968-13-6
1969-13-2
1969-13-3
1969-13-11
1970-13-8
1971-13-5
1972-13-1
1972-13-4
1972-13-7
1973-13-9
1973-13-12
1974-13-6
1975-13-2
1975-13-3
1975-13-11
1976-13-5
1977-13-1
1977-13-10
1978-13-4
1978-13-7
1979-13-9
1979-13-12
1980-13-3
1980-13-11
1981-13-8
1982-13-5
1983-13-1
1983-13-10
1984-13-9
1984-13-12
1985-13-6
1986-13-2
1986-13-3
1986-13-11
1987-13-8
1988-13-10
1989-13-4
1989-13-7
1990-13-9
1990-13-12
1991-13-6
1992-13-2
1992-13-8
1993-13-5
1994-13-1
1994-13-10
1995-13-4
1995-13-7
1996-13-6
1997-13-2
1997-13-3
1997-13-11
1998-13-8
1999-13-5
2000-13-1
2000-13-4
2000-13-7
Ich freue mich auf alle Antworten und Miträtselnden Teilnehmer