Boolescher Ausdruck - Problem

  • Themenstarter Themenstarter datumshnoob
  • Beginndatum Beginndatum
D

datumshnoob

Gast
Hallo,

ich habe folgendes gegeben: 24.12.2004. Alles was vor diesem Datum eingegeben wird, soll ungültig sein. Die Werte des Datums sind aufgeteilt in
Code:
int
-Werte.

Mein Versuch

Java:
if(jahr< 2004|| (monat < 12 && tag < 24) ) {
			System.out.println("zu früh");
		}

ist bei einem Datum wie 20.12.2004 falsch. Kann mir jemand helfen?
 
Dafür gibt es eine einfache Begründung: Du hast angegeben, dass der monat kleiner als zwölf sein muss... in deinem Beispiel ist er das aber nicht... du schließt durch diese anweisung alle tage des dezembers aus um das zu verhindern könntest du die anweisung zu <= ändern ... dann müsste es eigentlich gehen 😉
 
durch deine Oder Verbindung muss nur eine seite Wahr sein.
Entweder Jahr < 2004 Oder (monat <=12 Und tag < 24)

wenn du jetzt 08.08.2006 eingibst,
ist zwar die Bedingung mit dem Jahr falsch, aber bei der Oder Verknüpfung muss nur eine Seite wahr sein.
der Ausdruck ist also wahr und somit zu früh.
 
Zuletzt bearbeitet:
Wenn der monat aus einem Date kommt: Beachte, dass dort bei 0 angefangen wird. Gib dir die Variablen vor dem Test mal alle aus...
 
Irgendwie funktioniert das alles nicht so wirklich.

Das hier:

Java:
if(jahr < 2004 || (monat <= 12 && tag<= 23) ) {
			  System.out.println("zu früh");
		}

gibt mir für den 26.11.2004 ein gültiges Datum aus, obwohl es das nicht ist.

Was für eine Kombination ist denn die Richtige?!
 
Erstmal zu deiner Frage: spiel' es doch mal auf einem Blatt papier durch, dann siehst du warum da
Code:
false
rauskommt.
Daten so zu vergleichen ist etwas ungünstig. Du merkst selber, dass
Code:
26.11
vor
Code:
1.12
liegt, obwohl der Tag größer ist. Du solltest da lieber mit Date oder Calendar arbeiten, sowas wie:
Java:
Calendar c1 = GregorianCalendar.getInstance();
c1.set(Calendar.YEAR, 2004);
c1.set(Calendar.MONTH, 12);
c1.set(Calendar.DAY_OF_MONTH, 23);

Calendar c2 = GregorianCalendar.getInstance();
c2.set(Calendar.YEAR, 2004);
c2.set(Calendar.MONTH, 11);
c2.set(Calendar.DAY_OF_MONTH, 26);

if (c1.compareTo(c2) > 0) {
    System.out.println("zu früh");
}
 
Zuletzt bearbeitet:
Das düfte richtig sein

Java:
if(jahr < 2004||(jahr == 2004 && monat <12) ||jahr == 2004 && monat ==12 &&  tag < 24 ) {
            System.out.println("zu früh");
        }
 

Neue Themen


Zurück
Oben