einfachen kalender Programmieren HA!

lilalas

Mitglied
hallihallo! ich habe eine hausaufgabe auf und hänge irgendwie fest...
hier die aufgabenstellung:

Ihre Aufgabe ist es, eine Anwendung Kalender zu schreiben, die
zuerst einen Monat und ein Jahr einliest und den Kalender des Monats wie folgt ausgibt:

javac Kalender.java
java Kalender
Bitte geben Sie den Monat ein: 12
Bitte geben Sie das Jahr ein: 2010

Dezember 2010
Mo Di Mi Do Fr Sa So
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

Im zweiten Schritt soll ein Jahr eingegeben und ein Jahreskalender ausgegeben werden:
Bitte geben Sie das Jahr ein: 2011

Januar 2011
Mo Di Mi Do Fr Sa So
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

....

Dezember 2011
Mo Di Mi Do Fr Sa So
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

bin in programmieren leider noch ein absoluter anfänger, daher habe ich echt schwierigkeiten bei dieser aufgabe...wäre echt toll wenn ihr mir helfen könntet!! lg laune :bahnhof:
 

lilalas

Mitglied
also das ist der anfang, habe was aus nem anderen programm von mir kopiert und wollte das dort einbinden, mit der gaußschen wochentagsberechnung...also damit rechnet er halt immer aus welcher wochentag der 1. eines bestimmten monats ist... guck mal bei switch(w)-anweisung bei case 3. so wollte ich das eigentlich machen, nur das ist viel zu billig, einfach nur die out.prints verrücken und so...würde das gerne irgendwie mit nem array machen, nur weiß leider nicht wirklich wie das funktioniert.... daher würde ich mich sehr über hilfe freuen !

Java:
import java.util.Scanner;
public class Kalender {
  public static void main (String [] args) {
  
  
    String Mon = "falscher Eingabewert" , 
           Tag = "falscher Eingabewert" ; 
    int max = 31 ,
	    
	
  Scanner sc = new Scanner(System.in); 
  System.out.print("Bitte geben Sie den Monat ein:");
    int m = sc.nextInt();
  System.out.print("Bitte geben Sie das Jahr ein:");
    int jahr = sc.nextInt();
	int y = jahr % 100 ,
	    c = jahr / 100 ;
		
	switch (m)	  { 
		case 1: 
		 m = 11 ;
	      Mon = "Januar";  
		  max = 31; 
		  break;
        case 2: 
		  m = 12 ;
          Mon = "Februar";
          if (jahr % 4 == 0) 
 		  max = 29;
		  else
          max = 28;
          break;
        case 3: 
		  m = 1 ;
          Mon = "Maerz";
          max = 31;
		  break;
        case 4:
  		  m = 2 ;
          Mon = "April";
	      max = 30;
          break;
        case 5: 
		  m = 3 ;
          Mon = "Mai";
          max = 31;
		  break;
        case 6: 
		  m = 4 ;
          Mon = "Juni";
	      max = 30;
		  break;
        case 7: 
		  m = 5 ;
          Mon = "Juli";
	      max = 31;
		  break;
        case 8: 
		  m = 6 ;
          Mon = "August";
	      max = 31;
		  break;
        case 9: 
		  m = 7 ;
          Mon = "September";
	      max = 30;
		  break;
        case 10: 
		  m = 8 ;
          Mon = "Oktober";
		  max = 31;
		  break;
        case 11: 
		  m = 9 ;
          Mon = "November";
		  max = 30;
		  break;
        case 12: 
		  m = 10 ;
          Mon = "Dezember";
		  max = 31;
		  break;
      }
	  
      if (m == 11 || m == 12)  
        y = y-1 ;
	  if (y < 0)  
		y = 99;
      if (jahr >= 1600 && jahr % 400 ==0) 
        c = c-1 ;
   int w = (((1+(int)(2.6*m-0.2)+y+(int)(y/4)+(int)(c/4)-2*c)%7)+7)%7 ;
      switch (w) {  
        case 0: 
		  w = 0 ;
          Tag = "Sonntag";
		 
          break;
        case 1: 
		  w = 1 ;
          Tag = "Montag";
		  
          break;
        case 2: 
		  w = 2 ;
          Tag = "Dienstag";
		  
          break;
        case 3: 
		  w = 3 ;
          Tag = "Mittwoch";
		  System.out.println("     ");
		  System.out.println("     "+Mon+" "+jahr);
		  System.out.println("     ");
		  System.out.println("Mo "+"Di "+"Mi "+"Do "+"Fr "+"Sa "+"So ");
		  
		  
		  System.out.println("      "+"1  "+"2  "+"3  "+"4  "+"5  ");
		  System.out.println("6  "+"7  "+"8  "+"9  "+"10 "+"11 "+"12");
		  System.out.println("13 "+"14 "+"15 "+"16 "+"17 "+"18 "+"19");
		  System.out.println("20 "+"21 "+"22 "+"23 "+"24 "+"25 "+"26");
		  for (m== 11 || m==1 || m==3 || m==5 || m==6 || m==10 || m==8){
		  System.out.println("27 "+"28 "+"29 "+"30 "+"31");
		  }
		  for (m==2 || m==4|| m==7 || m==9) {
		  System.out.println("27 "+"28 "+"29 "+"30 ");
		  }
		  for (m==12){
		    if (jahr % 4 == 0)
			System.out.println("27 "+"28 "+"29 ");
			else
			System.out.println("27 "+"28 ");
			}
		  break;
        case 4: 
		  w = 4 ;
          Tag = "Donnerstag";
		 
          break;
        case 5: 
		  w = 5 ;
          Tag = "Freitag";
		  
          break;
        case 6: 
		  w = 6 ; 
          Tag = "Samstag";
		  
		  break;	
  	 }

	
	
  }
}
 

torbo

Mitglied
hey ich steh vor der gleichen aufgabe..
weiss auch nicht so richtig wie ich das ganze angehen soll da ich ebenfalls anfänger bin.
ich lass nach abfrage des monats/jahres immer den 1. wochentag dieses monats via gauß-formel berechnen um zu sehen um welchen wochentag es sich handelt.
bei der ausgabe des ergebnis weiss ich nun leider nich wie ich das am geschicktesten mache?

z.b. Dezember 2010 spurckt mir die formel dann ja aus dass der 1. ein Mittwoch ist. wie bring ich die ausgabe jetzt auf folgendes format:

Mo Di Mi Do Fr Sa So
1 2 3 4 5
6 7 8 9 10 11 12
usw..

switch anweisung klingt ja schon mal ganz gut, aber wie hat die auszusehen?

bin für jeden tipp dankbar!
gruß
 

lilalas

Mitglied
hat denn niemand einen tipp für mich? weiß nicht wie ich das mit dem 1. jedes monats fortführe...habe das bei switch(w) unter case 3 ja schon einwenig versucht, aber da habe ich nur out.prints verschoben und so, das is eigentlich viel zu billig...gibt doch sicher bessere schönere methoden! würde mich sehr freuen über eine antwort!
 

torbo

Mitglied
ich sitz an der selben aufgabe wie du und bin auchn bissl am verzweifeln ^^
den ersten teil der aufgabe hab ich gelöst. zwar sicherlich nicht optimal. aber immerhin funktionierts.
beim 2. teil wo das ganze jahr ausgegeben werden soll komm ihc nicht weiter.. ich denke man kann das ganze sicherlich mit for-schleifen lösen. aber ich habe keine richtige idee wie das gehen soll..
wäre für nen denkanstoß sehr dankbar!
 

lilalas

Mitglied
Jo hab den ersten Teil auch jetzt,aber halt nur so doof mit dem zeilenverrücken,also total hässlich^^ beim 2. Weiß ich auch nicht weiter...werde da morgen in der uni mal Kollegen Fragen! Gehste auch auf die tu BS oder is Zufall dass du das auch grad machen musst ^^
 

XHelp

Top Contributor
Diese Aufgabe lässt sich wunderbar mit der Calendar-Klasse lösen. Da kannst du Wochentag abfragen, Daten verschieben etc.
 

ARadauer

Top Contributor
ich denke man kann das ganze sicherlich mit for-schleifen lösen. aber ich habe keine richtige idee wie das gehen soll..
wäre für nen denkanstoß sehr dankbar!

naja du kapselst dein verhalten in ein methode, der man jahr und monat übergibt...
bei der jahresausgabe machst du dir eine for schleife von 1 bis 12 und rufst mit der laufvariable die methode auf...


Java:
System.out.println("      "+"1  "+"2  "+"3  "+"4  "+"5  ");
System.out.println("6  "+"7  "+"8  "+"9  "+"10 "+"11 "+"12");
nicht dein ernst oder? Ganz ehrlich willst du was abgeben? Ich würd den Student aus meiner Vorlesung schmeßen ;-) Habt hier schleifen schon durchgnommen?

Java:
public class Test {
  

   public static void main(String[] args)  {
      printCal(10, 2010);
  }
   
   public static void printCal(int month, int year){
      
      System.out.println("MO DI MI DO FR SA SO");
      
      int days = 31;// ermitteln anhand des monats wie viele tage dieser hat, entweder mathmatisch google hilft sicher oder mit Calendar
      int firstWeekDay = 3; //was ist der erste für ein Wochentag? Irgendwie erechnen oder über Calendar..
      
      
      for(int i = 1; i < firstWeekDay; i++){ //wir rücken richtig ein, für den ersten
         System.out.print("   ");
      }      
      int weekDay = firstWeekDay;
      
      for(int d = 1; d <= days; d++){ //wir iterieren über die tage         
         if(d < 10)
            System.out.print("0"); //das geht auch sauberer, aber für den anfang tut es
         
         System.out.print(d+" ");//einfach tag ausgeben
         if(weekDay %7 ==0) //am sonntag machen wir einen zeilenumbruch
            System.out.println("");
         weekDay++;
      }
   }
}
das sollte helfen...
days und firstWeekDay müsst ihr halt irgendwie ermitteln. ich weiß aber nicht ob ihr das mit java boardmitteln machen dürft.. wahrscheinlich schon...
 

mariusbopp

Bekanntes Mitglied
z.b. Dezember 2010 spurckt mir die formel dann ja aus dass der 1. ein Mittwoch ist. wie bring ich die ausgabe jetzt auf folgendes format:

Mo Di Mi Do Fr Sa So
........1 2 3 4 5
6 7 8 9 10 11 12
usw..

[/QUOTE]

also ich würde es in ne for schleife schreiben und dann halt soviele leerzeichen wie tage also in dem fall für mittwoch muss ja mo und die frei sein also gehst du 2 mal durch die schleife....

und mit der formatierung musst du dir halt ma überlegen an welcher stelle ein zeilenumbruch ge,acht werden muss... ich denke mit-> if (wochen tag % 7==0) mach n zeilenumruch... kommst du weiter
 

XHelp

Top Contributor
Entweder so, wie es im Beispiel von ARadauer ist, oder folgendes. Wenn 1 dein Monatbeginn ist und es ist ein Mittwoch, dann rechnest du
Code:
1-2=-1
und fängst an die Schleife zu lassen. Den Wert gibst du nur aus, wenn der
Code:
i>1
ist.
 

lilalas

Mitglied
sooo zunächst danke schonmal für die vielen antworten !
zu den beiträgen:
1. ist das kein informatikstudium. ^^
2. nein, ich wollte das nicht so abgeben, deswegen suche ich ja hier nach einer besseren lösung :)
und 3. danke für deine Hilfe ARadauer! ich gehe mal davon aus, dass wir diese bordmittel nutzen dürfen, also um den 1. des monats rauszufinden etc. nur wie hätte das auszusehen?
danke für deine hilfe !
 

XHelp

Top Contributor
Java:
Calendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month-1);//monate fangen bei 0 an
cal.set(Calendar.DAY_OF_MONTH,1);
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
//das liefert dir den Wochentag, wobei 0 der Sonntag ist
 

mariusbopp

Bekanntes Mitglied
hier mal eine lösung ohne die von java vorgegebene methode:
Java:
public class AnfangWoche {
    public int wochenanfang(int tag, int monat, int jahr){

          int h=0, k=0;

          if (monat<=2)

          {

                h=monat+12;

                k=jahr-1;

          }
      
          if (monat >2)

          {
                h=monat;

                k=jahr;
          }

          int wochentag= (tag+ 2*h+(3*h+3) /5 +k + k / 4 - k / 100 + k / 400 + 1) % 7; 

          return wochentag;
    }

}

gibt dir den 1. des monats als zahl aus so=0 mo=1 usw...
 

lilalas

Mitglied
Soo, ich habe jetzt mal was gebastelt, ohen irgendwelch anderen java bordmittel (außer dem Scanner). habe das noch von einer vorherigen aufgabe (wochentagsberechnung mit gauß-formel)mit dem zeug von Aradauer kombiniert. funktioniert auch alles soweit, nur dass bei monaten, wo der 1. ein samstag oder sonntag ist, das ganze falsch eingerückt wird...muss was mit switch(w) zu tun haben oder das i am anfang = 1 ist... hab schon mehrere sachen ausprobiert, bin aber anscheinend zu doof ???:L und dann habe ich noch ne frage, was genau das bedeutet:
Java:
 for(int d = 1; d <= days; d++){ //wir iterieren über die tage         
         if(d < 10)
            System.out.print("0"); //das geht auch sauberer, aber für den anfang tut es


hier mein bisheriger quelltext...

Java:
import java.util.Scanner;
public class Kalender {
  public static void main (String [] args) {
  
  
    String Mon = "falscher Eingabewert" , 
           Tag = "falscher Eingabewert" ; 
    int max = 31 ;
	    
	
  Scanner sc = new Scanner(System.in); 
  System.out.print("Bitte geben Sie den Monat ein:");
    int m = sc.nextInt();
  System.out.print("Bitte geben Sie das Jahr ein:");
    int jahr = sc.nextInt();
	int y = jahr % 100 ,
	    c = jahr / 100 ;
		
	switch (m)	  { 
		case 1: 
		 m = 11 ;
	      Mon = "Januar";  
		  max = 31; 
		  break;
        case 2: 
		  m = 12 ;
          Mon = "Februar";
          if (jahr % 4 == 0) 
 		  max = 29;
		  else
          max = 28;
          break;
        case 3: 
		  m = 1 ;
          Mon = "Maerz";
          max = 31;
		  break;
        case 4:
  		  m = 2 ;
          Mon = "April";
	      max = 30;
          break;
        case 5: 
		  m = 3 ;
          Mon = "Mai";
          max = 31;
		  break;
        case 6: 
		  m = 4 ;
          Mon = "Juni";
	      max = 30;
		  break;
        case 7: 
		  m = 5 ;
          Mon = "Juli";
	      max = 31;
		  break;
        case 8: 
		  m = 6 ;
          Mon = "August";
	      max = 31;
		  break;
        case 9: 
		  m = 7 ;
          Mon = "September";
	      max = 30;
		  break;
        case 10: 
		  m = 8 ;
          Mon = "Oktober";
		  max = 31;
		  break;
        case 11: 
		  m = 9 ;
          Mon = "November";
		  max = 30;
		  break;
        case 12: 
		  m = 10 ;
          Mon = "Dezember";
		  max = 31;
		  break;
      }
	  
      if (m == 11 || m == 12)  
        y = y-1 ;
	  if (y < 0)  
		y = 99;
      if (jahr >= 1600 && jahr % 400 ==0) 
        c = c-1 ;
   int w =(((1+(int)(2.6*m-0.2)+y+(int)(y/4)+(int)(c/4)-2*c)%7)+7)%7;
      switch (w) {  
        case 0: 
		  w = 0;
          Tag = "Sonntag";
		 
		  break;
        case 1: 
		  w = 1;
          Tag = "Montag";
		  
          break;
        case 2: 
		  w = 2;
          Tag = "Dienstag";
		  
          break;
        case 3: 
		  w = 3;
          Tag = "Mittwoch";
		  
		break;
        case 4: 
		  w = 4;
          Tag = "Donnerstag";
		 
          break;
        case 5: 
		  w = 5;
          Tag = "Freitag";
		  
          break;
        case 6: 
		  w = 6;
          Tag = "Samstag";
		  
		  break;	
  	 }

	System.out.println("MO DI MI DO FR SA SO");
      
      int days = max;// ermitteln anhand des monats wie viele tage dieser hat, entweder mathmatisch google hilft sicher oder mit Calendar
      int firstWeekDay = w; //was ist der erste für ein Wochentag? Irgendwie erechnen oder über Calendar..
      
      
      for(int i =1;i < firstWeekDay; i++){ //wir rücken richtig ein, für den ersten
         System.out.print("   ");
      }      
      int weekDay = firstWeekDay;
      
      for(int d = 1; d <= days; d++){ //wir iterieren über die tage         
         if(d < 10)
            System.out.print("0"); //das geht auch sauberer, aber für den anfang tut es
         
         System.out.print(d+" ");//einfach tag ausgeben
         if(weekDay %7 ==0) //am sonntag machen wir einen zeilenumbruch
            System.out.println("");
         weekDay++;
      }
	System.out.println(w);
  }
}
 
B

bone2

Gast
hm sonntag ist bei dir 0 aber die überschrift fängt mit MO DI MI an

und warum setzt du beim tagesswitch w = 0 wenn w == 0 ist? sinnlos
 

lilalas

Mitglied
Sonntag muss aber 0 sein,weil die Berechnung des 1. Des Monats sonst nicht hinhaut!das ist aus soner Tabelle die wir bekommen haben,womit man die Wochentage ausrechnen kann!und das mit w==0 soll doch kein Vergleich sein,sondern bei Case 0: (Sonntag) wird w der wert 0 zugewiesen,was für die Ausgabe des wochenags wichtig ist!
 
B

bone2

Gast
Java:
      for(int i =1;i < firstWeekDay; i++){ //wir rücken richtig ein, für den ersten
         System.out.print("   ");
      }

ist der erste ein sonntag, dann ist firstWeekDAy == 0 und damit wird eben nicht eingerückt
 

XHelp

Top Contributor
mit sowas wie
Code:
(firstWeekDay+6)%7
kannst du die Anzahl der Einrückungen bei So=0, Mo=1 berechnen.
 
B

bone2

Gast
deine schaltjahrberechnung ist auch falsch.

1900 ist kein schaltjahr, 2000 schon

regeln:
muss durch 4 teilbar sein, darf nicht durch 100 teilbar sein aber ist es durch 400 teilbar ist es ein schaltjahr

Java:
int februar = 1/(month%2*2 + month/2) * (2 - 1/(year%4+1) + 1/(year%100+1) - 1/(year%400+1));
maxday = 30 + month/8 + month%2 - (month/8 * month%2 * 2) - februar;
so kann man die maxtage für jeden beliebigen monat ausrechnen
 

lilalas

Mitglied
jo mit dem schaltjahr haste recht, das geht aber auch noch einfacher, ist aber grade auch nicht so relevant ^^
bei deiner lösung stimmt das ergebnis jedoch nicht ganz...wenn ich ...+6%7 mache ist die lösung falsch...
bei +7%7 ist das ergebnis für den Samstag als 1. des monats richtig, nur beim Sonntag rückt er das ganze wieder nicht ein...also case 6 funktioniert, case 0 leider noch nicht^^
 

lilalas

Mitglied
so hab ne lösung ^^ dein ansatz funktioniert doch, aber nur wenn man bei i=0 anfängt zu zählen und nicht bei i=1.
Java:
      for(int i = 0;i < (firstWeekDay+6)%7 ;i++){ //wir rücken richtig ein, für den ersten
         System.out.print("   ");
      }

so funktionierts, danke für deine hilfe !
 
B

bone2

Gast
jo mit dem schaltjahr haste recht, das geht aber auch noch einfacher

ach ja? wie denn bitte? die formel wie man max leichter ausrechnet interessiert mich

Java:
int schaltjahr = 1/(jahr%4+1) - 1/(jahr%100+1) + 1/(jahr%400+1);
ist der schaltjahr teil, 0 ist keins, 1 ist eins

hab deinen code mal zusammengekürzt und alles sinnlose entfernt
Java:
import java.util.Scanner;
public class Test {
    public static void main (String [] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("Bitte geben Sie den Monat ein:");
        int monat = sc.nextInt();
        System.out.print("Bitte geben Sie das Jahr ein:");
        int jahr = sc.nextInt();

        String monatsName = null;

        switch (monat) {
            case 1:
                monatsName = "Januar";
                break;
            case 2:
                monatsName = "Februar";
                break;
            case 3:
                monatsName = "Maerz";
                break;
            case 4:
                monatsName = "April";
                break;
            case 5:
                monatsName = "Mai";
                break;
            case 6:
                monatsName = "Juni";
                break;
            case 7:
                monatsName = "Juli";
                break;
            case 8:
                monatsName = "August";
                break;
            case 9:
                monatsName = "September";
                break;
            case 10:
                monatsName = "Oktober";
                break;
            case 11:
                monatsName = "November";
                break;
            case 12:
                monatsName = "Dezember";
                break;
            default : monatsName = "ungültiger Monat";
        }

        int februar = 1/(monat%2*2 + monat/2) * (2 - 1/(jahr%4+1) + 1/(jahr%100+1) - 1/(jahr%400+1));
        int max = 30 + monat/8 + monat%2 - (monat/8 * monat%2 * 2) - februar;

        monat -= 2;
        if (monat <= 0) {
            monat += 12;
        }

        int jahrzehnt = jahr % 100;
        int jahrhundert = jahr / 100 ;

        if (monat == 11 || monat == 12)
            jahrzehnt = jahrzehnt-1;
        if (jahrzehnt < 0)
            jahrzehnt = 99;
        if (jahr >= 1600 && jahr % 400 == 0)
            jahrhundert = jahrhundert-1;

        int firstWeekDay =(((1+(int)(2.6*monat-0.2)+jahrzehnt+(jahrzehnt/4)+(jahrhundert/4)-2*jahrhundert)%7)+7)%7;

        System.out.println(monatsName + " " + jahr);
        System.out.println("MO DI MI DO FR SA SO");

        for(int i = 0; i < (firstWeekDay+6)%7; i++) { //wir rücken richtig ein, für den ersten
            System.out.print("   ");
        }
        
        int weekDay = firstWeekDay;

        for(int d = 1; d <= max; d++){ //wir iterieren über die tage
            if(d < 10)
                System.out.print("0"); //das geht auch sauberer, aber für den anfang tut es

            System.out.print(d+" ");//einfach tag ausgeben
            if(weekDay %7 ==0) //am sonntag machen wir einen zeilenumbruch
                System.out.println();
            weekDay++;
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

lilalas

Mitglied
hast du das programm mal auf seine richtigkeit überprüft ? also bestimmte daten eingegeben und nachgeschaut ob dies richtig ist? weil eigentlich müsste es falsch sein, da du in der 1. switch anweisung diese umwandlung von m rausgenommen hast....damit diese gaußformel (int w=..) funktioniert, muss die eingabe des monats einwenig abgeändert werden...ich probier dein programm mal aus... danke dir !
 
B

bone2

Gast
Java:
        monat -= 2;
        if (monat <= 0) {
            monat += 12;
        }
die m umwandlung ist jetzt unten drunter ;)
 

lilalas

Mitglied
Java:
 monat -= 2;
        if (monat <= 0) {
            monat += 12;
        }
hab den teil eben erst entdeckt, das entspircht doch der umwandlung von m, (oder?^^)
jagut dann wäre deine variante in der tat kürzer und besser, habe halt wie schon gesagt, den ersten aufgabenteil aus einer anderen aufgabe kopiert und da eingefügt...
damit ist der erste teil der aufgabe komplett, im 2. soll ja noch ein jahreskalnder ausgegebn werden. mache ich das dann auch mit ner schleife ?
 
B

bone2

Gast
ich würde den einzelmonatsteil in eine eigene methode packen. dann in einer zweiten methode die erste mit schleife 12 mal aufrufen

Java:
public void printEinMonat(int monat, int jahr) {
// hier alles nach dem scanner rein aus deiner alten main
}

public void printEinJahr(int jahr) {
    for (i <= 12) {
        printEinMonat(i,jahr);
    }
}

public static void main() {
    // scanner nutzen und ausgabeart/jahr/monat abfragen

    if (monat) {
        printEinMoant(monat, jahr);
    }
    else {
        printEinJahr(jahr);
    }
}
 
Zuletzt bearbeitet von einem Moderator:

lilalas

Mitglied
jo klingt auf jedenfall logisch, würde ich gerne so machen...bisher haben wir jedoch noch nicht groß mit verschiedenen methoden gearbeitet, sondern eigentlich alles in die main gekloppt =(
kannste das nochmal schnell so zusammenkopieren, wie das am ende auszusehen hat?
bin dir sehr dankbar für deine bemühungen :) :applaus:
 
B

bone2

Gast
das schaffst du schon^^ so schwer ist es das ja nun auch wieder nicht. wir helfen nur, wir machn keine hausaufgaben ;)

wenn es probleme gibt, frag, alles nötige steht eigentlich in meinem letzten post
 

lilalas

Mitglied
was ich vergessen habe, kannst du meinen ansatz nehmen ?^^ deiner ist zwar zweifelslos besser, aber wenn ich den abgeben sollte, würde das ziemlich nach zusammenkopiert aussehen^^ in meinem ansatz habe ich ja schon große teile aus meiner 1. hausaufgabe drin, daher sieht das dann besser aus und ich kanns dem HiWi auch besser erklären^^ hier nochmal das was ich bisjetz habe:
Java:
import java.util.Scanner;
public class Kalender {
  public static void main (String [] args) {
  
  
    String Mon = "falscher Eingabewert" , 
           Tag = "falscher Eingabewert" ; 
    int max = 31 ;
	    
	
  Scanner sc = new Scanner(System.in); 
  System.out.print("Bitte geben Sie den Monat ein:");
    int m = sc.nextInt();
  System.out.print("Bitte geben Sie das Jahr ein:");
    int jahr = sc.nextInt();
	int y = jahr % 100 ,
	    c = jahr / 100 ;
		
	switch (m)	  { 
		case 1: 
		 m = 11 ;
	      Mon = "Januar";  
		  max = 31; 
		  break;
        case 2: 
		  m = 12 ;
          Mon = "Februar";
          if (jahr % 4 == 0) 
 		  max = 29;
		  else
          max = 28;
          break;
        case 3: 
		  m = 1 ;
          Mon = "Maerz";
          max = 31;
		  break;
        case 4:
  		  m = 2 ;
          Mon = "April";
	      max = 30;
          break;
        case 5: 
		  m = 3 ;
          Mon = "Mai";
          max = 31;
		  break;
        case 6: 
		  m = 4 ;
          Mon = "Juni";
	      max = 30;
		  break;
        case 7: 
		  m = 5 ;
          Mon = "Juli";
	      max = 31;
		  break;
        case 8: 
		  m = 6 ;
          Mon = "August";
	      max = 31;
		  break;
        case 9: 
		  m = 7 ;
          Mon = "September";
	      max = 30;
		  break;
        case 10: 
		  m = 8 ;
          Mon = "Oktober";
		  max = 31;
		  break;
        case 11: 
		  m = 9 ;
          Mon = "November";
		  max = 30;
		  break;
        case 12: 
		  m = 10 ;
          Mon = "Dezember";
		  max = 31;
		  break;
      }
	  
      if (m == 11 || m == 12)  
        y = y-1 ;
	  if (y < 0)  
		y = 99;
      if (jahr >= 1600 && jahr % 400 ==0) 
        c = c-1 ;
   int w =(((1+(int)(2.6*m-0.2)+y+(int)(y/4)+(int)(c/4)-2*c)%7)+7)%7;
   
	System.out.println("");
	System.out.println("     "+Mon+" "+jahr); 
    System.out.println("");
	System.out.println("MO DI MI DO FR SA SO");
      
      
     for(int i = 0;i < (w+6)%7 ;i++){ //wir rücken richtig ein, für den ersten
         System.out.print("   ");
      }      
      int weekDay = w;
      
      for(int d = 1; d <= max; d++){ //wir iterieren über die tage         
         if(d < 10)
            System.out.print("0"); 
         
         System.out.print(d+" ");//einfach tag ausgeben
         if(weekDay %7 ==0) //am sonntag machen wir einen zeilenumbruch
            System.out.println("");
         weekDay++;
      }
  }
}
 

lilalas

Mitglied
jo danke dir, das ding ist nur ich weiß an sich gar nicht genau wie das mit den methoden auszusehen hat^^ aber ich werds mal versuchen, danke
 

mariusbopp

Bekanntes Mitglied
jetzt habe ich auch mal eine frage zum kalender und zwar mach ich grad auch einen aber hab noch ein problem mim zeilenumbruch am ende der woche... namche monate macht er ihn richtig manche nicht...

ich fange die woche mit so=0 an und höre mit sa=6 auf
umbruch mache ich wie follgt:
Java:
if (((aw.wochenanfang(tag, jahr, monat)) + i)% 7== 0)
                      System.out.println();
                else
                      System.out.print(" ");
stimmt da was nciht oder fehlt da was nicht i ist quasi der tag an dem es er ist da ich das in ner for schleife drinne hab und i++...
 
B

bone2

Gast
mit was fangen denn die monate an, die nicht gehen?

@lilalas
kleiner fehler meinerseits:
[c]public static void printxxx (){}[/c] damit du sie in der mainmethode aufrufen kannst, das static ist wichtig
 

mariusbopp

Bekanntes Mitglied
@mariusbopp : ich empfehl dir {} zu benutzen...

aber macht das einen unterschied wenn nur eine anweisung drinne steht??
Java:
if(blabla){
anweisung1
}
else{
anweisung2
}
zu
Java:
if(blabla)
anweisung1

else
anweisung2

edit: also den 1.5.2010 gibt er richtig aus den 1.2.2010 zb nicht mehr da macht er den umbruch einen zu fruh...
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
nein aber ich hab schon genug Anfängern bei solchen einfachen Themen geholfen, dass ich weiß das das ein Stolperstein sein kann... dann kommt aufeinmal eine zweite Anweisung hinzu oder irgendwo noch ein if und dann hat keiner mehr einen Plan warum da jetzt was nicht geht. Saubere Eeinrückung und Klammern helfen da doch sehr.

Es funktioniert auch ohne aber ich hab auch "empfehl" gesagt...
 

mariusbopp

Bekanntes Mitglied
naja mit der sauberkeit is so ne sache^^ wir basteln quasi zu 2 an dem prog rum...

aber ich verstehe einfach nicht wieso ers beim februar macht und beim märz z.b wieder nicht...???:L
 
B

bone2

Gast
naja ein bischen mehr code vlt

Java:
        for(int d = 1; d <= max; d++){ //wir iterieren über die tage
            if(d < 10)
                System.out.print("0"); //das geht auch sauberer, aber für den anfang tut es

            System.out.print(d);//einfach tag ausgeben

            if ((d+firstWeekDay) % 7 == 0)
                System.out.println();
            else
                System.out.print(" ");
            //weekDay++;
        }
funktioniert
 

ARadauer

Top Contributor
aber ich verstehe einfach nicht wieso ers beim februar macht und beim märz z.b wieder nicht...
habt ihr eigentlich keinen debugger? oder dürft ihr sowas wie eclipse nicht verwenden?
da ist ja nix komplizierte daran oder? das sieht man ja nach 40 sekunden debuggen, warum er jetzt genau bei einer stelle etwas anders macht...
 

mariusbopp

Bekanntes Mitglied
habt ihr eigentlich keinen debugger? oder dürft ihr sowas wie eclipse nicht verwenden?
da ist ja nix komplizierte daran oder? das sieht man ja nach 40 sekunden debuggen, warum er jetzt genau bei einer stelle etwas anders macht...
doch debuggt hab ich auch schon...an manchen monaten ist die zahl für den umbruch zu groß bzw zu klein aber ich hab noch keine logig gefunden um das zu lösen bzw seh meinen fehler nicht...:eek:
 
B

bone2

Gast
anscheinend ja nicht.
a) debugger
b) mehr code posten
c) fehler genauer beschreiben, als manchmal gehts nicht
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Ich komme nicht mehr weiter bei so einer einfachen Sache... Java Basics - Anfänger-Themen 18
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
C Die Klasse Menge mit Konstruktoren und einfachen Methoden Java Basics - Anfänger-Themen 5
J Einfachen String ausgeben Java Basics - Anfänger-Themen 4
J Wo liegt nur an dieser einfachen Bedingung mein Fehler? Java Basics - Anfänger-Themen 8
E Input/Output einfachen Socket für XML-Anfragen bauen Java Basics - Anfänger-Themen 13
A Erstellung eines einfachen Plugin HILFE ! Java Basics - Anfänger-Themen 19
A Doppelter Backslash durch einen einfachen Backslash ersetzen Java Basics - Anfänger-Themen 6
StrikeTom Was ist an dieser einfachen funktion falsch? Java Basics - Anfänger-Themen 5
Y Problem mit einfachen Methoden Java Basics - Anfänger-Themen 18
F "n cannot be resolved" Fehler im einfachen programm - Warum? Java Basics - Anfänger-Themen 11
C Konstanten zu einfachen Berechnungen unterhalb Main Methode Java Basics - Anfänger-Themen 19
brainray Einfachen RMI Server bei einem Provider zum Laufen bringen Java Basics - Anfänger-Themen 3
Y Einfachen Quelltext in UML darstellen mit Eclipse Java Basics - Anfänger-Themen 8
Binary.Coder Bubblesort in einfachen unmissverständlichen Sätzen Java Basics - Anfänger-Themen 2
S Benutzereingaben in einfachen numerischen Matheaufgaben Java Basics - Anfänger-Themen 7
M Suche einen ganz einfachen Editor (syntax Highlighting+comp) Java Basics - Anfänger-Themen 7
F Erstellen von einfachen JFrame Java Basics - Anfänger-Themen 2
B Ertsellung einer einfachen Matrix Java Basics - Anfänger-Themen 12
G Problem mit einer ganz einfachen Funktion Java Basics - Anfänger-Themen 8
M Hilfe bei einem einfachen Java-Programm Java Basics - Anfänger-Themen 41
B Brauche Hilfe bei nem ganz einfachen Programm... Java Basics - Anfänger-Themen 4
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
F MS365 Kalender lesen Java Basics - Anfänger-Themen 5
sserio Gregorianischer Kalender und dessen Tage. Java Basics - Anfänger-Themen 14
T simpler Kalender Java Basics - Anfänger-Themen 10
G Kalender Jahreszahlen Java Basics - Anfänger-Themen 6
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9
J Gerorianischer Kalender wechselt am Freitag die Woche Warum Java Basics - Anfänger-Themen 2
N Kalender - Tag addieren gibt 31. Juni zurück Java Basics - Anfänger-Themen 3
S Hinweis zu Fehler im Kalender-Code - Aufgabe 5.3 aus Grundkurs Programmieren in Java 7. Auflage Java Basics - Anfänger-Themen 4
I c++ sexagesimal kalender Java Basics - Anfänger-Themen 5
I ical - Datei auf Server ablegen und Kalender abbonieren Java Basics - Anfänger-Themen 0
C Kalender in Applet einfügen Java Basics - Anfänger-Themen 0
U Neu Julianischer Kalender Java Basics - Anfänger-Themen 2
T Kalender irrt sich Java Basics - Anfänger-Themen 8
M Kalender reloaded Java Basics - Anfänger-Themen 7
L Kalender Java Frame Java Basics - Anfänger-Themen 7
M Kalender mit Terminen Java Basics - Anfänger-Themen 24
F Problem mit selbstprogrammierten Kalender (als Übung) Java Basics - Anfänger-Themen 4
J Arrays (Kalender) Fehler im Programm Java Basics - Anfänger-Themen 2
P Date oder Kalender? Was soll man verwenden? Java Basics - Anfänger-Themen 2
K Erste Schritte Kalender selber erstellen? Java Basics - Anfänger-Themen 3
A JKomponente für Kalender Java Basics - Anfänger-Themen 5
R Kalender speichert keine Zeit Java Basics - Anfänger-Themen 2
M Kalender Java Basics - Anfänger-Themen 15
E Methoden zusammenfassen/Kalender erstellen Java Basics - Anfänger-Themen 13
T Einfacher Kalender Java Basics - Anfänger-Themen 17
G Kalender Bean in Netbean einbinden Java Basics - Anfänger-Themen 3
F Termine in einen kalender eintragen. Java Basics - Anfänger-Themen 11
G Kalender Von String zu boolean -- NullpointerException Java Basics - Anfänger-Themen 2
S Wie Termine/Notizen in Outlook Kalender einfügen ? Java Basics - Anfänger-Themen 3
D Gibt es einen vordefinierten Kalender in java? Java Basics - Anfänger-Themen 8
H Java Kalender systemabhängig programmieren? Java Basics - Anfänger-Themen 3
B Kalender -> Termine eintragen Java Basics - Anfänger-Themen 1
W Java Kalender Java Basics - Anfänger-Themen 6
B Kalender und Wochentagswechsel Java Basics - Anfänger-Themen 6
G The serializable class Kalender does not declare a static fi Java Basics - Anfänger-Themen 5
A Kalender mit Objekten belegen Java Basics - Anfänger-Themen 3
A kalender Java Basics - Anfänger-Themen 26
J Wie drucke ich eine Komponente wie Kalender auf dem Drucker Java Basics - Anfänger-Themen 3
G Kalender ? Java Basics - Anfänger-Themen 6
S kalender machen Java Basics - Anfänger-Themen 40
G kalender Java Basics - Anfänger-Themen 15
P Kalender Programmieren Java Basics - Anfänger-Themen 2
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
laxla123 Rechteck programmieren Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
D Programmieren nach UML Java Basics - Anfänger-Themen 2
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
B Überweisung programmieren Java Basics - Anfänger-Themen 7
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
thor_norsk Fernseher programmieren mit Java Java Basics - Anfänger-Themen 4
M Jenga Regeln Java Programmieren Java Basics - Anfänger-Themen 1
M Ressourcensparend programmieren Java Basics - Anfänger-Themen 3
brypa Wie Programmieren lernen? Java Basics - Anfänger-Themen 15
G Spielerwechsel programmieren Java Basics - Anfänger-Themen 1
J Solitär (Brettspiel) programmieren Java Basics - Anfänger-Themen 3
H Objektorientiertes Programmieren Java Basics - Anfänger-Themen 4
K 12- Stunden Konverter Programmieren Java Basics - Anfänger-Themen 1
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
L Zahlenspiel programmieren Java Basics - Anfänger-Themen 1
TimoN11 Automat programmieren Java Basics - Anfänger-Themen 4
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
N Ufospiel programmieren Java Basics - Anfänger-Themen 13
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
Drinkerbell Erste Schritte Zu blöd zum Programmieren? Java Basics - Anfänger-Themen 9
G Stack programmieren Java Basics - Anfänger-Themen 6
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
G Bruchrechner programmieren Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben