Jahreskalender

devo22

Mitglied
Hi,
beim letzten Beispiel des Semesters komme ich leider nicht weiter ... die Aufgabe ist, vom Benützer ein Jahr zu erfragen und für dieses Jahr einen Kalender in diesem Format auszugeben:

January
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 26

und so weiter. Das habe ich bisher:

Java:
import java.util.Scanner;

public class PrintCal {

	private static int year;
	         
	private static String[] months = { "January", "February", "March", "April", "May", "June", "July",
									   "August", "September", "October", "November", "December" };
	     
	private static int[] totalDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	
	public static int getYear()
	    {
	        Scanner sc = new Scanner(System.in);     
	        System.out.println("Enter a year: ");
	        int year = sc.nextInt();     
	        return year;
	    }

	public boolean isLeap ()
	    {
	        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
	        {
	            totalDays[1] = 29;
				return true;
				}
			return false;
		}
	
	public static void printCalendar(int count)
	    {
			for (int i = 0; i < 12; i++) {
				count = i;
				System.out.println(months[count] + " " + year);
				System.out.println("-----------------------------");
				System.out.println(" Su Mo Tu We Th Fr Sa");
				}
		}
  }

Ich speichere mir also erst mal die Monatsnamen (für den Header bei der Ausgabe) und die dazugehörige Anzahl der Tage in Arrays ab. In isLeap() wird überprüft, ob es ein Schaltjahr ist.

Nun komme ich aber nicht weiter, weil ich bei zwei Sachen nicht weiß, wie ich sie umsetzen soll:

- den ersten Tag des jeweiligen Monats herausfinden, und
- den Kalender dann sauber zu drucken.

Kann mir da jemand helfen? Wäre für jeden Tipp dankbar!!!
 

timbeau

Gesperrter Benutzer
Ich hab was gefunden im Netz, verstehe aber die verwendete Formel selber nicht auf Anhieb. Die Klasse (leicht verändert) gibt dir den ersten Tag des Jahres aus

Java:
public class Datum_wochentag {
	public static void main(String[] args) throws IOException {
		BufferedReader eingabe = new BufferedReader(new InputStreamReader(
				System.in));
		System.out.println("Jahr:");
		String joar = eingabe.readLine();
		int j = Integer.parseInt(joar);
		int t, m;

		t = 1;
		m = 1;
		j = 1998;

		int m2, j2 = j;

		/*
		 * Monat kleiner als Maerz?
		 */
		if (m <= 2) {
			m2 = m + 10; // Monat wird um 10 erhoeht
			j2 = j - 1; // Jahr um 1 reduziert - also im Datum 2 Monate nach hinten verschoben
		} else
			m2 = m - 2; // Monat wird um 2 reduziert - warum?

		int c = j2 / 100; // die ersten beiden ziffern des Jahres (19)76
		int y = j2 % 100; // die letzten beiden ziffern des Jahres 19(76)

		int tmp1 = (26 * m2 - 2);
		int tmp2 = (tmp1 / 10) + t + y + y / 4;
		int tmp3 = tmp2 + c / 4;

		int h = (tmp3 - 2 * c) % 7;

		if (h < 0)
			h = h + 7;

		if (h == 0)
			System.out.println("Sonntag, " + t + "." + m + "." + j);
		if (h == 1)
			System.out.println("Montag, " + t + "." + m + "." + j);
		if (h == 2)
			System.out.println("Dienstag, " + t + "." + m + "." + j);
		if (h == 3)
			System.out.println("Mittwoch, " + t + "." + m + "." + j);
		if (h == 4)
			System.out.println("Donnerstag, " + t + "." + m + "." + j);
		if (h == 5)
			System.out.println("Freitag, " + t + "." + m + "." + j);
		if (h == 6)
			System.out.println("Samstag, " + t + "." + m + "." + j);

		System.out.println("ENDE");
	}
}

Dann solltest du dir eine Methode schreiben, die je nach Starttag und Anzahl Tage so eine Ausgabe praktiziert. Das geht mit nem 2-dim Array z.B.
 

chalkbag

Bekanntes Mitglied
Zwei Fehler waren noch drinnen.

Anweisung j = 1998 muss raus, und j2 muss gleich 1976 sein

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Datum_wochentag {
    public static void main(String[] args) throws IOException {
        BufferedReader eingabe = new BufferedReader(new InputStreamReader(
                System.in));
        System.out.println("Jahr:");
        String joar = eingabe.readLine();
        int j = Integer.parseInt(joar);
        int t, m;
 
        t = 1;
        m = 1;
        
 
        int m2, j2 = 1976;
 
        /*
         * Monat kleiner als Maerz?
         */
        if (m <= 2) {
            m2 = m + 10; // Monat wird um 10 erhoeht
            j2 = j - 1; // Jahr um 1 reduziert - also im Datum 2 Monate nach hinten verschoben
        } else
            m2 = m - 2; // Monat wird um 2 reduziert - warum?
 
        int c = j2 / 100; // die ersten beiden ziffern des Jahres (19)76
        int y = j2 % 100; // die letzten beiden ziffern des Jahres 19(76)
 
        int tmp1 = (26 * m2 - 2);
        int tmp2 = (tmp1 / 10) + t + y + y / 4;
        int tmp3 = tmp2 + c / 4;
 
        int h = (tmp3 - 2 * c) % 7;
 
        if (h < 0)
            h = h + 7;
 
        if (h == 0)
            System.out.println("Sonntag, " + t + "." + m + "." + j);
        if (h == 1)
            System.out.println("Montag, " + t + "." + m + "." + j);
        if (h == 2)
            System.out.println("Dienstag, " + t + "." + m + "." + j);
        if (h == 3)
            System.out.println("Mittwoch, " + t + "." + m + "." + j);
        if (h == 4)
            System.out.println("Donnerstag, " + t + "." + m + "." + j);
        if (h == 5)
            System.out.println("Freitag, " + t + "." + m + "." + j);
        if (h == 6)
            System.out.println("Samstag, " + t + "." + m + "." + j);
 
        System.out.println("ENDE");
    }
}
 

Neue Themen


Oben