Kalender programmieren, ich finde meinen Fehler nicht.

Bitte aktiviere JavaScript!
Hallo, ich nehme gerade das Buch "Schrödinger programmiert Java. Das etwas andere Fachbuch" durch. Allerdings habe ich einen hänger. Aufgabenstellung lautet:
11858

Es ist eine Übung zu Schleifen. Mein Lösungsweg ist:
Code:
public class kalender {
    public static void main (String[]args){
        int monat=6;
        int starttag=2;

        if (monat>=0 && monat<=11 && starttag>=0 && starttag<=6) {
            int tage;
            switch (monat) {
                case 0:
                case 2:
                case 4:
                case 6:
                case 8:
                case 10:
                    tage = 31;
                    break;
                case 1:
                    tage = 28;
                    break;
                default:
                    tage = 30;
            }
            System.out.println("|Mo|Di|Mi|Do|Fr|Sa|So|");
            int wochen = (tage + starttag) > 35 ? 6 : 5;

            for (int woche = 1; woche <= wochen; woche++) {
                for (int tag = 1; tag <= 7; tag++) {
                    int datum = tag +(woche-1)*7 - starttag;
                    if (datum > 0 && datum < tage) {
                        System.out.println( "|"+ ((datum<10)?" ": " ")+datum);

                    } else {
                        System.out.println("|  ");
                    }
                }
                System.out.println("|");

            }
        }}}
allerdings liefert er mir in der Ausgabe alle Werte UNTEREINANDER und nicht wie es sein sollte. Wie auf dem Bild zu sehen ist sollte er eigentlich nach dem Sonntag in eine neue Zeile springen. Aber irgendwie springt er andauernd in eine neue Zeile. Warum?
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Und noch eine kleine Anmerkung zu den Monaten:
Es ist nicht immer jeder zweite Tag, der 31 Tage hat. Das wechselt in der zweiten Jahreshälfte: Juli und August haben 31 Tage.
Also die Monate 0, 2, 4, 6, 7, 9 und 11 haben 31 Tage.
 
:)
Kann jemand diese Satz (int datum = tag +(woche-1)*7 - starttag;)
für mich erklären

Das Rechnet aus, welchem Tag des Monats der Wochentag tag der Woche woche entspricht, wobei starttag der Index des ersten Tags des Monats ist.

Beispielhaft für heute: tag=2(=Dienstag), woche = 3(=dritte Woche), starttag = 2 (Monat startete Mittwoch = Index 2)

2 + (3 - 1) * 7 - 2 = 14
 
Das Rechnet aus, welchem Tag des Monats der Wochentag tag der Woche woche entspricht, wobei starttag der Index des ersten Tags des Monats ist.

Beispielhaft für heute: tag=2(=Dienstag), woche = 3(=dritte Woche), starttag = 2 (Monat startete Mittwoch = Index 2)

2 + (3 - 1) * 7 - 2 = 14
Vielen Dank
aber warum Dienstag ist 2 und Mittwoch ist auch 2 (ich weiß dass 0 Montag ist)
 
Zuletzt bearbeitet:
Ich hätte das etwas anders gemacht:

Java:
String[][][] kal = new String[12][6][7];
for (int i = 0; i < 12; i++) {
    for (int j = 0; j < 6; j++) {
        for (int k = 0; k < 7; k++) {
            kal[i][j][k] = "  ";
        }
    }
}
Calendar jetzt = new GregorianCalendar();
Calendar anfang = new GregorianCalendar(jetzt.get(Calendar.YEAR), 0, 1);
for (int i = 0; i < 12; i++) {
    int monat = anfang.get(Calendar.MONTH);
    int wd = (anfang.get(Calendar.DAY_OF_WEEK) + 5) % 7;
    /*
    Amerika: erster Tag Sonntag, Sonntag==1, wir müssen 2 abziehen
     */
    while (anfang.get(Calendar.MONTH) == monat) {
        kal[monat][wd / 7][wd % 7] = String.format("%02d", anfang.get(Calendar.DAY_OF_MONTH));
        wd++;
        anfang.add(Calendar.DAY_OF_YEAR, 1);
    }
}
for (String[][] stringses : kal) {
    for (String[] strings : stringses) {
        System.out.println(Arrays.toString(strings));
    }
    System.out.println("");
}

Code:
[  , 01, 02, 03, 04, 05, 06]
[07, 08, 09, 10, 11, 12, 13]
[14, 15, 16, 17, 18, 19, 20]
[21, 22, 23, 24, 25, 26, 27]
[28, 29, 30, 31,   ,   ,   ]
[  ,   ,   ,   ,   ,   ,   ]

[  ,   ,   ,   , 01, 02, 03]
[04, 05, 06, 07, 08, 09, 10]
[11, 12, 13, 14, 15, 16, 17]
[18, 19, 20, 21, 22, 23, 24]
[25, 26, 27, 28,   ,   ,   ]
[  ,   ,   ,   ,   ,   ,   ]

[  ,   ,   ,   , 01, 02, 03]
[04, 05, 06, 07, 08, 09, 10]
[11, 12, 13, 14, 15, 16, 17]
[18, 19, 20, 21, 22, 23, 24]
[25, 26, 27, 28, 29, 30, 31]
[  ,   ,   ,   ,   ,   ,   ]

[01, 02, 03, 04, 05, 06, 07]
[08, 09, 10, 11, 12, 13, 14]
[15, 16, 17, 18, 19, 20, 21]
[22, 23, 24, 25, 26, 27, 28]
[29, 30,   ,   ,   ,   ,   ]
[  ,   ,   ,   ,   ,   ,   ]

[  ,   , 01, 02, 03, 04, 05]
[06, 07, 08, 09, 10, 11, 12]
[13, 14, 15, 16, 17, 18, 19]
[20, 21, 22, 23, 24, 25, 26]
[27, 28, 29, 30, 31,   ,   ]
[  ,   ,   ,   ,   ,   ,   ]

[  ,   ,   ,   ,   , 01, 02]
[03, 04, 05, 06, 07, 08, 09]
[10, 11, 12, 13, 14, 15, 16]
[17, 18, 19, 20, 21, 22, 23]
[24, 25, 26, 27, 28, 29, 30]
[  ,   ,   ,   ,   ,   ,   ]

[01, 02, 03, 04, 05, 06, 07]
[08, 09, 10, 11, 12, 13, 14]
[15, 16, 17, 18, 19, 20, 21]
[22, 23, 24, 25, 26, 27, 28]
[29, 30, 31,   ,   ,   ,   ]
[  ,   ,   ,   ,   ,   ,   ]

[  ,   ,   , 01, 02, 03, 04]
[05, 06, 07, 08, 09, 10, 11]
[12, 13, 14, 15, 16, 17, 18]
[19, 20, 21, 22, 23, 24, 25]
[26, 27, 28, 29, 30, 31,   ]
[  ,   ,   ,   ,   ,   ,   ]

[  ,   ,   ,   ,   ,   , 01]
[02, 03, 04, 05, 06, 07, 08]
[09, 10, 11, 12, 13, 14, 15]
[16, 17, 18, 19, 20, 21, 22]
[23, 24, 25, 26, 27, 28, 29]
[30,   ,   ,   ,   ,   ,   ]

[  , 01, 02, 03, 04, 05, 06]
[07, 08, 09, 10, 11, 12, 13]
[14, 15, 16, 17, 18, 19, 20]
[21, 22, 23, 24, 25, 26, 27]
[28, 29, 30, 31,   ,   ,   ]
[  ,   ,   ,   ,   ,   ,   ]

[  ,   ,   ,   , 01, 02, 03]
[04, 05, 06, 07, 08, 09, 10]
[11, 12, 13, 14, 15, 16, 17]
[18, 19, 20, 21, 22, 23, 24]
[25, 26, 27, 28, 29, 30,   ]
[  ,   ,   ,   ,   ,   ,   ]

[  ,   ,   ,   ,   ,   , 01]
[02, 03, 04, 05, 06, 07, 08]
[09, 10, 11, 12, 13, 14, 15]
[16, 17, 18, 19, 20, 21, 22]
[23, 24, 25, 26, 27, 28, 29]
[30, 31,   ,   ,   ,   ,   ]

Das stimmt... zumindest für dieses Jahr, mit meinem Windows Kalender überein

Aber ich mag mich daran erinnern, dass man auch mit 5 anstatt 6 Wochen hinkommen kann....
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben