schleife macht problem

puschelemo21

Mitglied
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.

Java:
 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
 

puschelemo21

Mitglied
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.
 
Zuletzt bearbeitet:
F

Firephoenix

Gast
Ich kanns mir nicht verkneifen :D
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

Mitglied
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:
 
F

Firephoenix

Gast
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
 

Vidar

Mitglied
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.
 
F

Firephoenix

Gast
Nicht verwirren lassen ;) ich versuchs nochmal etwas einfacher:

Java:
(!(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

Top Contributor
Ü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 ??
 

Neue Themen


Oben