# Datum prüfen



## Skahead (27. Nov 2009)

Hallo,

ich habe ein Programm welches mir das eingegebene Datum in 3 verscheidenen Varianten ausgibt und eine neue Methode erstellt die das Datum prüfen soll. Sowie es die Aufgabenstellung vom leher möchte. Im Struktogramm haben wir es mit wenn;dann;sonst gelöst. Mein problem jetzt:
Ich möchte das Schaltjahr per Selektion pruefen. bin ich hiermit richtig?

```
public void pruefeDatum(){
		
		if (jahr%4&&!jahr%100||jahr%400){
			(schaltjahr=ok)
		}
		else if (jahr/4&&!jahr/100||jahr%400){
			(schlatjahr = nicht ok)
		}
	
	}
```

oder muss ich das mit switch und case versuchen?
Da schlatjahr wird gebraucht um festzulegen wie viel tage der monat februar hat und die restlichen kontrollstrukturen sollen festelgen in welchen wertebereichen, sich die tage der restlichen monate befinden dürfen und welche plausibel sind.
Kann mir jmd helfen?

LG
skahead


----------



## SlaterB (27. Nov 2009)

es reicht ein if, 
wenn du im else-Fall bist, dann ist es 'nicht ok', da musst du die Bedingung nicht noch mal hinschreiben

für Java wäre an der Bedingung noch viel zu feilen, bei && und || sollte man Klammern setzen, 
man kann kaum davon ausgehen, dass Java alles richtig interpretiert,

und jahr%4 ist eine Zahl, kein boolean


----------



## Skahead (28. Nov 2009)

Danke für deine Antwort, hab wieder was dazugelernt. Ichwerd mal bissl ausprobieren und posten sobald sich etwas ergibt. Aber was ist denn ein Boolean?


LG
Skahead


----------



## SlaterB (28. Nov 2009)

ein Wahrheitswert, true oder false

'true && true' ergibt wieder etwas, '4 && 12' mit Zahlen ist dagegen Quatsch


----------



## Skahead (2. Dez 2009)

ja das stimmt
hab folgende Lösung nach meinem Struktogramm als Ergebnis. Folgendes Porblem tritt ein. ich bekomme bei egal welchen testwerten "plausibel" raus.wie kann das sein?


```
if (jahr%4==0&&!(jahr%100==0)||(jahr%400==0)) {
			pruefeSchaltjahr=true;
		}
			else {
				pruefeSchaltjahr=false;
			}
	
		if (jahr<=1&&jahr>=9999){
			pruefeJahr=true;
		}
			else {
				pruefeJahr=false;
			}
		
		
		if (monat<=1&&(monat>=12)){
			pruefeMonat=true;
		}
			else {
				pruefeMonat=false;
			}
		
		
		if (monat==1||monat==3||monat==5||monat==7||monat==8||monat==9||monat==11){
			letzterTagMonat=31;
		}
		
		if (monat==4||monat==6||monat==10||monat==12){
				letzterTagMonat=30;
			}
		if (monat==2&&(pruefeSchaltjahr=true)){
					letzterTagMonat=28;
				}
		
					else if (monat==2&&(pruefeSchaltjahr=false)){
						letzterTagMonat=29;
					}

                if (tag>=1&&(tag<=letzterTagMonat)){
						pruefeTag=true;
					}
						else {
							pruefeTag=false; 
						}			

		if (pruefeJahr=true&&(pruefeTag=true)&&(pruefeMonat=true)){
			System.out.println("pausibel.");
		}
		 else if (pruefeJahr=false||(pruefeTag=false)||(pruefeMonat=false)){
			 System.out.println("nicht plausibel.");
		 }
```


LG
Skahead


----------



## SlaterB (2. Dez 2009)

if (pruefeJahr=true &&
-> Variable pruefeJahr wird auf true gesetzt, if ist immer erfüllt (abgesehen von &&)

if (pruefeJahr==true &&
-> Variable pruefeJahr bleibt unverändert, if ist nur dann erfüllt, wenn pruefeJahr true enthält (abgesehen von &&)

if (pruefeJahr &&
-> das gleiche ohne Möglichkeit für Tippfehler


----------



## Skahead (2. Dez 2009)

```
if (jahr<=1&&jahr>=9999){
            pruefeJahr=true;
        }
            else {
                pruefeJahr=false;
            }
```

bedeutet dann das die boolean-Variable "pruefeJahr" immer true ist?
aber das sonsthat doch auch einfluss darauf... verstehs nicht ganz


----------



## SlaterB (2. Dez 2009)

in Zeile 46 steht 
> if (pruefeJahr=true &&

dort muss aber
if (pruefeJahr==true &&
stehen

sowie an diversen Stellen derselbe Fehler, == ist was anderes als =

am besten nur
if (pruefeJahr &&
schreiben


----------



## Skahead (2. Dez 2009)

Ahh dankeschön  werd ich gleich ausprobieren. Meld mich dann 

Dankeschön


----------



## Michael... (2. Dez 2009)

Du setzt die Werte in Zeile 46 auf true - man vergleicht mit ==. Abgesehen davon muss man booleans nicht mit true vergleichen.
Ausserdem:
- bei Dir wird geprüft, ob jahr kleiner 1 *und* größer 9999 ist --> das kann niemals so sein --> pruefeJahr = false

```
if (jahr <= 1 && jahr >= 9999) { 
	pruefeJahr = true;
```

- gleiches gilt für die Überprüfung des Monats
- Oktober und Dezember haben 31 Tage, September und November nur 30


----------



## Skahead (3. Dez 2009)

Vielen Dank. Es lag tatsächlich an den Zeichen "Größer-Gleich" und "Kleiner-Gleich".
habs geändert und es läuft.
LG
Skahead


----------

