Zum Inhalt springen

Probleme mit while-Schleife


snopsy

Empfohlene Beiträge

Hi,

ich habe jetzt ein Programm geschrieben, welches das aktuelle Datum abfrägt, in verschiedene Variablen aufteilt und am Ende wieder zusammensetzt. In einer Weile schleife soll das Datum hochgezählt werden, bis es mit einem vorher definierten Datum übereinstimmt. Die beiden Datums stehen in einer String-Variablen.

Hier mal meine methode mit der While-Schleife:

while (nowDate != reisebeginn)
{
if(nowDate.equals(reisebeginn))
{
System.out.println("\n\nHeute geht's in Urlaub!!! \nYiiipppiiiieee Yiiiipppiiiieeee Yeeeaaahhhr");
}
else
{
if(m == 04 || m == 06 || monat == "09" || m == 11)
{
if(t <= 29)
{
t++;
count++;
ausgabe();
}
else
{
t = 01;
m++;
count++;
ausgabe();
}

System.out.println("Der Monat hat 30 Tage!");
}
else if(m == 02)
{
System.out.println("Der Monat hat 28 Tage!");
}
else
{
if(t <= 30)
{
t++;
count++;
ausgabe();
}
else
{
t = 01;
m++;
count++;
ausgabe();
}

System.out.println("Der Monat hat 31 Tage!");
}
}
} [/PHP]

Die Variable m und monat ist im prinzip das gleiche. Nur ist m ein Integer-wert und monat ein String-wert. nur als ich m == 09 angegeben habe, wurde immer eine Klammer verlangt.

Hier meine Ausgabe-Methode:

[PHP]tag = Integer.toString(t);
monat = Integer.toString(m);

nowDate = tag + "." + monat + "." + jahr;

System.out.println("\nCount: " + count);
System.out.println("Datum: " + nowDate);

Hier meine Datums-methode:

Date dtDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
nowDate = sdf.format(dtDate);

tag = nowDate.substring(0,2);
monat = nowDate.substring(3,5);
jahr = nowDate.substring(6,10);[/PHP]

Das Problem ist, daß die While schleife immer durchläuft. auch wenn das Datum bereits erreicht ist. Wenn das Datum erreicht ist, wird immer Heute geht's in Urlaub... angezeigt.

Woran liegt es, daß meine Schleife nicht endet??? :confused:

Danke & Gruß Snopsy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

tue mir doch bitte den Gefallen und beschäftige dich mal mit dem GregorianCalendar. Damit gehen solche vergleiche doch soooooo einfach. Und auch das Hochzählen ist damit kein Problem. Da brauchst du dir dann keine Gedanken mehr zu machen, wieviele Tage ein Monat hat etc. ....

Andererseits hast du dich bis hier hin natürlich schon tapfer durchgekämpft und das will man dann ja auch nicht so einfach wegwerfen....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Mirko,

ja das habe ich jetzt auch vor, mich mal mit dem GregorianCalendar zu beschäftigen. :) Aber irgendwie hat das gar nicht so einfach ausgesehen auf den ersten Blick.

Da hast DU recht, daß man das dann nicht so einfach verwerfen will. ABer ich werde mir die Variante jetzt mal anschauen

Grüßle Snopsy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht gebe ich dir einfach mal ein paar Tipps zum GregorianCalendar.

Der GregorianCalendar hält sämtliche Daten in einem Array. Auf die einzelnen Felder greift man immer mit der get() methode zu, und übergibt ihr den Feldindex, dessen Inhalt man haben will. Zum Beispiel:



GregorianCalendar tempCalendar = (GregorianCalendar) GregorianCalendar.getInstance(); // damit hast du einen Calendar mit dem aktuellen Datum samt Uhrzeit erzeugt.

//Jetzt kannst du auf die Felder zugreifen. Für jedes Feld gibt es eine Konstante, die du benutzen kannst

int tempYear = tempCalendar.get(Calendar.YEAR);
int tempMonth = tempCalendar.get(Calendar.MONTH);
int tempDay = tempCalendar.get(Calendar.DAY_OF_MONTH);

//Das Verändern der einzelnen Felder funktioniert mit set()

//Jetzt noch zu deinem Hochzählen: Du kannst einfach mit add() die Felder hochzählen

tempCalendar.add(Calendar.DAY_OF_MONTH,1) //zählt den Tag eins hoch

// Bei allen veränderungen werden jeweils die Felder konsistent gehalten, du brauchst dich also nicht um einen Monatgswechsel zu kümmern oder so...

[/PHP]

So, ich hoffe das erleichtert dir den Einstieg. Ansonsten einfach nur Nachfragen...

Gruß

Mirko

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Mirko,

danke für den Tip! Das hat mich schon deutlich weitergebracht. Ich hab das jetzt mal so umgesetzt und noch ne While-Schleife eingebaut. Aber ich verstehe net, warum die While-Schleife nicht abbricht, wenn die Bedingung erreicht ist, kann mir das jemand sagen, woran das liegt?

hier mein bisheriges Programm:

import java.util.*;

public class Datum
{
int tag = 31;
int monat = 07;
int jahr = 2002;
int count = 0;

public Datum()
{
super();
}

public void aktuellesDatum()
{
GregorianCalendar tempCalendar = (GregorianCalendar) GregorianCalendar.getInstance();

int tempYear = tempCalendar.get(Calendar.YEAR);
int tempMonth = tempCalendar.get(Calendar.MONTH);
int tempDay = tempCalendar.get(Calendar.DAY_OF_MONTH);

System.out.println("Tag: " + tempDay);
System.out.println("Monat: " + tempMonth);
System.out.println("Jahr: " + tempYear);

while(tempDay != tag)
{
tempCalendar.add(Calendar.DAY_OF_MONTH,1);
int tempDayNew = tempCalendar.get(Calendar.DAY_OF_MONTH);
count++;
System.out.println("\nNeuer Tag: " + tempDayNew);
System.out.println("Count: " + count);
}
}
}[/PHP]

Ich hab nichts mehr gefunden, woran das liegen könnte.

Danke schon für die Hilfe

Gruß Snopsy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey!

ich danke Euch. Mein Script läuft bis jetzt wunderbar. Ich habe es jetzt sogar soweit. daß der Monat hochgezählt wird. Und zwar zähle ich den mit Hilfe der maximalen Tage im Monat hoch. Diese lasse ich mir geben und überprüfe das dann im if. Denn leider gibt es für den Monat und das Jahr ja keine add-Funktion. Aber das ist nicht so schlimm. Das mit den Tagen ist das wichtigste und das ist geschafft :):) :cool: :bimei

Nur gibt es jetzt ein Problem. Ich lasse mir schön das Datum geben und anzeigen. Heute ist ja der 24.5.2002. Allerdings wird mir der 24.4.2002 angezeigt. Woran liegt das, daß mir hier nicht der richtige Monat angezeigt wird?

Was aber lustig ist, ich lasse mir noch die maximalen Tage des Monats anzeigen zum vergleichen, ob das übereinstimmt. Ergebnis hierbei ist, daß 31 Tage angezeigt werden. Also das richtet sich dann wiederrum wirklich aktuellen Datum (also 24.5.2002) Denn der April hat ja nur 30 Tage.

kann man das irgendwie speziell regeln, daß das richtig angezeigt wird, oder soll ich einfach bißle schummeln und einfach gleich beim Monat 1 dazuzählen???

hier nochmals der Quellcode, wie ich mir das Datum und die maximalen Tage anzeigen lasse:

GregorianCalendar tempCalendar = (GregorianCalendar) GregorianCalendar.getInstance();

int tempYear = tempCalendar.get(Calendar.YEAR);
int tempMonth = tempCalendar.get(Calendar.MONTH);
int tempDay = tempCalendar.get(Calendar.DAY_OF_MONTH);

System.out.println("Tag: " + tempDay);
System.out.println("Monat: " + tempMonth);
System.out.println("Jahr: " + tempYear);

int tageMonat = tempCalendar.getActualMaximum(tempCalendar.DAY_OF_MONTH);
System.out.println("Der Monat hat " + tageMonat + " Tage!");[/PHP]

Danke & Gruß Snopsy

P.S.: Ich denke mal, es ist am einfachsten ich mache einen beschummler und zähle gleich am Anfang einfach zum Monat noch 1 dazu! Ich will nur mal wissen, wie ihr es machen würdet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ahso, na da hätte ich ja auch selber drauf kommen können ich idiotin :D Ich seh die Tabelle ja noch vor mir liegen MONTH gehen von 0-11 oh mann oh mann! Erst jetzt realisier ich des wo Dus sagst. na was solls.

also ich habs jetzt so realisiert, daß ich zum Monat gleich 1 dazuzähle und es funzt wonderbra :D:D:) :bimei :bimei :OD :WD

Cool

CU Snopsy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...