Methoden Tage zwischen 2 Daten

seide

Mitglied
hallo, warum geht nicht diese methode? wo ist fehler?

Java:
public static int berechneTage(int t, int m, int j)
    {
		int t2=1;
		int m2=1;
		int j2=1582;
		int tage=0;
    
		  while (!(t2 == t && m2 == m && j2 == j)) {
	            tage++;
	            t2++;
	          if(isSchaltjahr(j2) && m2==2)  
	                tage += 29;
	                    else if(!isSchaltjahr(j2) && m2==2)  
	                        tage += 28;
	                            else{
	                                if(m2%2==0)  
	                                    tage += 30;
	                                        else{
	                                            tage += 31;    
	                                            }
	                                }}
	           return tage;
	                                }
 
Erstens: formatier das mal ordentlich, da sieht ja keine Sau durch...
Zweitens: füg´ mal ´n paar sysouts ein, um zu sehen, was in deinen variablen drinsteht, dann siehst du den Fehler idR. recht schnell.

EDIT: Deine ganzen in der Methode deklarierten Variablen /zumindest
Code:
m2
und
Code:
t2
) werden nie geändert, insofern kann sich an deinen Bedingungen auch nichts ändern...
 
Zuletzt bearbeitet:
Praktisch wäre zu wissen was die Methode tun sollte!

Des Weiteren bei
Java:
 if(m2%2==0)  
{
    tage += 30;
}
else
{
    tage += 31;    
}
ein kleiner Denkfehler, diese Regel gilt nur bis m2 == 7 danach dreht sie sich um ;-)


EDIT: du änderst zwar dein 't2' aber der rest wird nie geändert (m2, j2) somit wirst je nach parameter ewig in der while loop bleiben
 
Zuletzt bearbeitet von einem Moderator:
Hi,

ich denke mal du willst die Tage seit dem 01.01.1582 berechnen. Was wird denn als Ergebnis ausgespuckt? Eine viel zu große Zahl, zu kleine Zahl, ein Fehler?
Und ich empfehle dir, Parameter sowie Variable mit mehr Bedeutung zu bennenen, sowie die If-Else-Bedingungen übersichtlicher einrücken und nicht einfach alles nach unten hin, nur weiter nach rechts zu rücken.

Die Schleifenbedingung kann ja zum Beispiel niemals zum Abbruch führen, da du
Code:
m2
und
Code:
j2
niemals änderst.
 
Hi,

ich denke mal du willst die Tage seit dem 01.01.1582 berechnen. Was wird denn als Ergebnis ausgespuckt? Eine viel zu große Zahl, zu kleine Zahl, ein Fehler?
Und ich empfehle dir, Parameter sowie Variable mit mehr Bedeutung zu bennenen, sowie die If-Else-Bedingungen übersichtlicher einrücken und nicht einfach alles nach unten hin, nur weiter nach rechts zu rücken.

Die Schleifenbedingung kann ja zum Beispiel niemals zum Abbruch führen, da du
Code:
m2
und
Code:
j2
niemals änderst.

ja ich möchte die Tage zählen zwische 1.1.1582 und 1.1.1960(als Parameter), aber ich verstehe nicht, wie kann ich dass machen ohne getTimeInMillis()😳 , also programm zeigt gar nichts.

kann ich vielleicht so etwas machen, als if-Abfrage🙂?
Java:
if(isSchaltjahr(j2) )  {
	                tage += 366;
	          j2++;}
	                    else { 
	                        tage += 365;
	                                }
 
Zuletzt bearbeitet:
Ein Ansatz wäre doch, eine rekursive Methode zu nutzen, die zuerst prüft, ob die beiden ihr übergebenen Daten identisch sind. Sollte dem nicht so sein, werden t2 und ggf. m2 und j2 um eins erhöht und die Funktion wird mit diesen neuen Parametern erneut aufgerufen. Müsstest du nur noch diese Bedingungen umsetzen, aber das hast du zum Teil ja sowieso schon...

EDIT: Da ´s gestern bereits anderswo die Anmerkung gab: if-schleife.de
 
Dein gedachter Ansatz ist ja schon richtig nehme ich an.
Du hast das Datum 01.01.1582. Sagen wir mal du willst die Tage bis heute, den 04.04.2012, berechnen.
Dann prüfst du wie viele Tage und Monate Differenz dazwischen liegen. Nun bist du ja beim Datum 04.04.1582 (bildlich) angelangt. Anschliessend kannst du in einer for-Schleife (if-Schleifen gibt es nicht 😉) noch deine Prüfung mit dem Schaltjahr durchführen und die entsprechenden Tage aufaddieren.


-Edit- hier etwas Beispielcode. Wenn du die Kommentare korrekt ersetzt, sollte das richtige Ergebnis geliefert werden.

Java:
public int berechneTage(int tag, int monat, int jahr) {
   int abTag = 1;
   int abMonat = 1;
   int abJahr = 1582;

   int anzahlTage = 0;

   while(tag > abTag) {
      anzahlTage += tag--;
   }

   while(monat > abMonat) {
      /* Prüfen wieviel Tage der Monat hat und entsprechend hochzählen.
       * Wie von einem meiner Vorposter genannt ändert sich die Beziehung zwischen geraden Monaten
       * und Anzahl an Tage ab dem August (08).
       */
   }

   while(jahr > abJahr) {
      //hier deine if-Bedingung mit Schaltjahr
   }

   return anzahlTage;
}

-Edit2-
Brauchst du das für eine Schulaufgabe oder nur für dich zum üben? Du machst es dir etwas einfacher, da du mit einem fixen Datum arbeitest und das gerade am 01.01.XXXX beginnt.
Wenn du das zum Laufen bekommst, kannst du dich ja mal dransetzen und eine 2te Methode schreiben, damit du 2 beliebige Daten eingeben kannst und er dir dann, falls die Anhzal an Tagen nicht negativ wäre, das Ergebnis berechnet.

Denn wenn du das fixe Datum z.B. durch 12.12.1200 ersetzt, musst du anders rechnen wenn du die korrekte Anzahl an Tagen bis zum 04.04.2012 haben willst 😉
 
Zuletzt bearbeitet:
-Edit2-
Brauchst du das für eine Schulaufgabe oder nur für dich zum üben? Du machst es dir etwas einfacher, da du mit einem fixen Datum arbeitest und das gerade am 01.01.XXXX beginnt.
Wenn du das zum Laufen bekommst, kannst du dich ja mal dransetzen und eine 2te Methode schreiben, damit du 2 beliebige Daten eingeben kannst und er dir dann, falls die Anhzal an Tagen nicht negativ wäre, das Ergebnis berechnet.

Denn wenn du das fixe Datum z.B. durch 12.12.1200 ersetzt, musst du anders rechnen wenn du die korrekte Anzahl an Tagen bis zum 04.04.2012 haben willst 😉

na danke dir! Ich mache gerade ei Java Kurs und es ist ein Teil von Aufgabe "Gregorianisches und Julianisches Datum". Ich habe noch eine frage warum es zählt schon richtig ohne
Java:
while(monat > abMonat) {
        }
🙂

ah sorry es zählt richtig nur wenn monat und tag =1 🙂
 
Zuletzt bearbeitet:
Gib mal als Testdatum ein Anderes als das von dir Genannte ein 😉
Da du das fixe Datum am 01.01 und auch für die Parameter Tag und Monat 1 hast, zählt er natürlich keine Tage und Monate.
 
Gib mal als Testdatum ein Anderes als das von dir Genannte ein 😉
Da du das fixe Datum am 01.01 und auch für die Parameter Tag und Monat 1 hast, zählt er natürlich keine Tage und Monate.

was mache ich wieder falsch?🙁
Java:
 while(monat > abMonat) {
		   if(abMonat==2) 
		    if(!isSchaltjahr(abJahr)) {
		          anzahlTage+= 28; 
			  abMonat++;}
		     else {
			anzahlTage+= 29; 
			abMonat++;}
		      else {   if(abMonat==4||abMonat==6||abMonat==9||abMonat==11) {
				    anzahlTage+= 30; 
				   abMonat++;
				   }
				   else {
				      anzahlTage+= 31; 
				      abMonat++;
				      }}
		   }
 
Wie wäres

1. Mal mit Fehlerbeschreibungen?
2. Mit kleinen Tests?
3. Mit einer vernünftigen Formatierung?

Java:
public static int berechneTage(int tag, int monat, int jahr) {
		   int abTag = 1;
		   int abMonat =1;
		   int abJahr = 1582;
		 
		   int anzahlTage = 0;
		 
		   while(tag > abTag) {
		      anzahlTage += tag--;
		   }
		 
		   while(monat > abMonat) {
		     	     if(abMonat==2) 
				      if(!isSchaltjahr(abJahr)) {
				         anzahlTage+= 28; 
			           abMonat++;}
				      else {
				         anzahlTage+= 29; 
				         abMonat++;}
			else { if(abMonat==4||abMonat==6||abMonat==9||abMonat==11) {
				      anzahlTage+= 30; 
				   abMonat++;
				   }
				   else {
				      anzahlTage+= 31; 
				      abMonat++;
				      }}
		   }		 
		   while(jahr > abJahr) {
	          if(isSchaltjahr(abJahr) )  {
                       anzahlTage += 366;
                       abJahr++;}
                       else { 
                          anzahlTage += 365;
                           abJahr++;

		   }}
		   return anzahlTage;
		}

wenn ich ersetze abMonat oder abTag auf andere Wert, liefert falsch anzahlTage.
 
Ich kann timbeau nur zustimmen. Bitte wirklich mal den Text sauber formatieren und Fehler nennen (zu viel/zu wenig Tage). Übersichtlicher Code bringt dir etwas, weil du dann den Programmfluss besser nachvollziehen kannst und uns um dir besser zu helfen.
Java:
if (x) {
   //code
} else if (y) {
   //code
} else {
   if (z) {
      //code
   }
}

Auf jedenfall kannst du abMonat++ ans Ende der while-Schleife schreiben, da du das sowieso in jedem if-else-Zweig anwendest.
 
Java:
while (tag > abTag) {
			anzahlTage ++;
			tag--;
		}

So passts auf jeden Fall besser.

Wenn dir hier jemand helfen soll ist die Frage/Aussage "Liefert falsche Tage" immernoch besch****!

Eingabe: X
Ausgabe: Y
Soll aber sein: Z

Versetz dich doch mal in die Forenteilnehmer :noe:
 
Java:
}
            else { if(
wtf!
Verwendest du Eclipse oder sowas? Drück mal Strg+Shift+F das hilf enorm!
 
Danke für eure Hilfe, ist erledigt.🙂

nur habe ich noch eine Frage. Wenn ich die Anzahl der Tage zwischen aktuellem Datum und dem durch die Parameter fesgelegten Datum berechnet möchte,
Java:
public dateDiff(int tag, int monat, int jahr)

kann ich aktuelles Datum so deklarieren
Java:
Date date = new Date();

und dann "date" irgendwie teilen auf Tag,Monat, Jahr?
 

Zurück
Oben