# schleife macht problem



## puschelemo21 (25. Okt 2011)

Hallo,
ich hab ne Aufgabenstellung bekommen die ich mit if-schleife lösen soll angefangen hab ich damit schon aber ich bekomm es einfach nicht hin.


```
if (! (zeichen4>='a' && zeichen4<='f' && zeichen4>='0' && zeichen4<='9' )){
      System.out.println("Falsch");
      }
```
also ich möchte prüfen ob zeichen4 was ich einlese keine zahl zwischen 0-9 und kein buchstabe von a-f is wenns so is dann halt Fehlermeldung und ich darf kein else verwenden. ich hab schon so viele kombinationen versucht aber komm nicht drauf ???:L
danke schonma <3


----------



## Final_Striker (25. Okt 2011)

Deine Klammerung der Bedingungen ist falsch.


----------



## puschelemo21 (25. Okt 2011)

warum is da die Klammerung falsch?
wie soll das sonst funktionieren? =/

if (!(zeichen4>='a'&& zeichen4<='f')&&(zeichen4>='0' && zeichen4<='9' )){
      System.out.println("Falsch");
      } funktioniert nicht.


----------



## Firephoenix (25. Okt 2011)

Ich kanns mir nicht verkneifen 
if-schleife.de

Zu der Klammerung:

was du prüfen willst ist ob der char nicht in dem intervall [0,9] und nicht in dem intervall [a,f] liegt.

du hast also 2 aussagen (char nicht in [0,9]) und (char nicht in [a,f]).
Willst du dort das nicht ausklammern wird aus dem und ein oder (boolsche logik)
denn (not A and not B) <=> not(A or B).

Wenn man deine Klammerung auf einen informellen Text überträgt erhält man:

Wenn nicht gilt : zeichen größer a und zeichen kleiner f und zeichen größer 0 und zeichen kleiner 9
dann gebe falsch aus.

Das ist aber nicht das was du prüfen willst  überleg dir dazu einmal wann die innere Aussage ohne das ! überhaupt wahr wird (bzw ob sie überhaupt wahr werden kann)
Gruß


----------



## puschelemo21 (25. Okt 2011)

genau das is das problem es liegt nicht am ! es liegt am Inhalt von zeichen4.
ja wenn dus dir nid verkneifn kannst lass es heraus. 
wenn ich sag die aussage a-f und 0-9 is wahr dann is das a=>f und 0=>9 = ww 
aber wenn ich in der aussage ein m eintrage ist genau der konflikt den ich MIT ! und OHNE habe.:bahnhof:


----------



## Firephoenix (25. Okt 2011)

Die Prüfungen ob dein zeichen in den Intervallen liegt sind ja auch korrekt, allerdings prüfst du darauf ob es in beiden Intervallen gleichzeitig liegt, wenn das nicht zutrifft (es trifft nie zu, die intervalle sind disjunkt), ergibt der innere wert false und dieses false negierst du dann -> true


----------



## puschelemo21 (25. Okt 2011)

ich versteh grad nur Bahnhof was du mir damit sagen willst. Sorry bin Neuling mit Java........


----------



## Vidar (25. Okt 2011)

Dein Problem ist, dass du überprüfst ob das Zeichen zwischen 'a' und 'f' UND zwischen '0' und '9' liegt. Und d.h. du suchst ein Zeichen das gleichzeitig ein Buchstabe und eine Zahl ist.


----------



## Firephoenix (25. Okt 2011)

Nicht verwirren lassen  ich versuchs nochmal etwas einfacher:


```
(!(zeichen4>='a'&& zeichen4<='f')&&(zeichen4>='0' && zeichen4<='9' ))
```

zerlegen wir mal die Bedingung:
(zeichen4>='a'&& zeichen4<='f') bedeutet "zeichen4 ist zwischen a und f"
(zeichen4>='0' && zeichen4<='9' ) bedeutet "zeichen4 ist zwischen 0 und 9";

Diese Beiden Aussagen hast du mit einem und verknüft:
"zeichen4 ist zwischen a und f" UND "zeichen4 ist zwischen 0 und 9"

Jetzt überleg dir mal, wann diese Aussage wahr wird, genau dann wenn zeichen4 sowohl zwischen a und f als auch zwischen 0 und 9 liegt, zeichen4 müsste also gleichzeitig ein buchstabe und eine zahl sein.

Da die Bedingung nie wahr wird ist sie immer false.
Jetzt negierst du die Bedingung noch, und da du immer false negierst erhälst du immer true 


Was du eigentlich haben willst ist folgendes:

Diese Situation darf nie eintreten:
"zeichen4 ist zwischen a und f" ODER "zeichen4 ist zwischen 0 und 9"

Das bedeutet wenn diese Aussage wahr wird, dann ist dein zeichen falsch, und genau dann musst du falsch ausgeben. Diese Aussage jetzt noch in java-gerechtem syntax runterzuschreiben sollte nun durchaus machbar sein 
Gruß


----------



## Murray (25. Okt 2011)

Überlege mal, was passiert, wenn du das ! weglässt: dann wird geprüft, ob das Zeichen gleichzeitig zwischen a und b und zwischen 0 und 9 liegt - und das kann niemals erfüllt sein. Also evaluiert der Ausdruck ohne ! immer zu false.  Und wenn man jetzt das ! wieder hinzunimmt ??


----------



## puschelemo21 (25. Okt 2011)

ah stimmt man ich bin so blind. Danke


----------

