Kalender programmieren, ich finde meinen Fehler nicht.

Diskutiere Kalender programmieren, ich finde meinen Fehler nicht. im Java Basics - Anfänger-Themen Bereich.
A

AkiHawasaki

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?
 
Robat

Robat

Du nimmst zur Ausgabe ja auch immer println. Versuch mal die print Methode mit einzubauen
 
A

AkiHawasaki

Wow... vielen Dank. Ich übersehe das ln immer! Aber das ging jetzt ja schnell! Danke!
 
K

kneitzel

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.
 
S

SamEna

:)
Kann jemand diese Satz (int datum = tag +(woche-1)*7 - starttag;)
für mich erklären
 
mrBrown

mrBrown

:)
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
 
S

SamEna

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:
mrBrown

mrBrown

starttag wird 0-basiert gezähl (Montag=0) und Tag 1-basiert (Montag=1)
 
X

Xyz1

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....
 
Thema: 

Kalender programmieren, ich finde meinen Fehler nicht.

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben