if-Bedingung
-
Hallo
Ich habe ein kleines Problem. kann mir jemand sagen, warum bei dieser if-Bedingung die 2. Bedingung gar nicht betrachtet wird?
if ((n_bond[akt][1] && (naechsterPunkt == rechts(akt) || naechsterPunkt == links(akt))) || (n_bond[bottom][1] && (naechsterPunkt == rechts(akt) || naechsterPunkt == links(akt)))) {Anweisung}Die Bedingung in Worten:
wenn der Bond nach oben oder unten zeigt und im nächsten Schritt nach rechts oder links geht, dann soll die Anweisung danach ausgeführt werden.Könnte man das einfacher machen, bin ich da zu kompliziert vorgegangen?
Die Anweisung ist ziemlich lange, deshalb will ich die Bedingungen nicht unbedingt trennen.Danke
Nijntje
-
if ((n_bond[akt][1] || n_bond[bottom][1]) && (naechsterPunkt == rechts(akt) || naechsterPunkt == links(akt)))Meinst nicht das ist so sinnvoller?
-
ja, das stimmt, dumm von mir.

aber hier kann ich das nicht:if ((n_bond[left][0] && (naechsterPunkt == rechts(akt))) || (n_bond[akt][1] && (naechsterPunkt == unten(akt))) || (n_bond[akt][0] && (naechsterPunkt == links(akt))) || (n_bond[bottom][1] && (naechsterPunkt == oben(akt)))) {}hier wird dann auch nur die 1. Bedingung betrachtet...
-
Wie meinst du das? Wenn n_bond[left][0] false ist, dann wird naechsterPunkt == rechts(akt) logischerweise nicht mehr geprüft. Aber es wird natürlich nichts so übersprungen, dass es etwas nicht "bedenkt".
-
Mir ist klar, dass wenn n_bond[left][0] false ist, der nächste Punkt übersprungen wird, aber dann müsste n_bond[akt][1] als nächstes überprüft werden, oder?
Das macht es aber nicht.Stimmt die Formulierung aber so?
Also, wenn der Bond nach links geht und der nächste nach rechts, oder
wenn der Bond nach oben und nach unten, oder..., dann erfolgt die Anweisung danach.Danke
-
nijntje schrieb:
Stimmt die Formulierung aber so?
Der (besseren?) Uebersicht halber wuerde ich alle Klammern (ausser denen der Anweisung und der Argumente) weglassen, denn && bindet staerker als ||. Somit ist es das Gleiche ohne Klammern. Um zu sehen, wo es wirklich dran liegt, gibt vielleicht eine Betrachtung aller in der Abfrage verwendeter Werte Aufschluss, indem Du sie direkt vor der Abfrage einfach mal auf der Konsole ausgibst. Vielleicht kannst Du ja den Fehler dann schon 'sehen'.
-
Das sieht schon richtig aus, denke mal der Fehler liegt woanders. Ansonsten probier doch mal
bool left = n_bond[left][0] && naechsterPunkt == rechts(akt); bool akt_1 = n_bond[akt][1] && naechsterPunkt == unten(akt); bool akt_2 = n_bond[akt][0] && naechsterPunkt == links(akt); bool bottom = n_bond[bottom][1] && naechsterPunkt == oben(akt); if (left || akt_1 || akt_2 || bottom) { }
-
Vielen Dank
Ja, der Fehler liegt woanders...
Grüsse
Nijntje