2016-09-20 4 views
0

Ich bin neu in Swift und der Informatik im Allgemeinen. Zusätzlich zur Apple-Dokumentation verwende ich Swift Playground auf dem iPad, um meine Ausbildung zu ergänzen. In Swift Playground ist das Ziel meines Codes, meinen Charakter durch ein Labyrinth zu bekommen. Der folgende Code wird korrekt erhalten meine wenn mein Labyrinth:Logische Operatoren 'UND'/'ODER' in Swift While-Schleife

func navigateAroundWall() { 
    if isBlockedRight && isBlocked { 
     turnLeft() 
    } else if isBlockedRight { 
     moveForward() 
    } else { 
     turnRight() 
     moveForward() 
    } 
} 

while !isOnOpenSwitch { 
    while !isOnGem && !isOnClosedSwitch { 
     navigateAroundWall() 
    } 
    if isOnGem { 
     collectGem() 
    } else { 
     toggleSwitch() 
    } 
    turnLeft() 
    turnLeft() 
} 

Hier ist, wo meine Verwirrung liegt:

while !isOnGem && !isOnClosedSwitch { 
     navigateAroundWall() 
    } 

richtig zu meinem Labyrinth zu gehen, wenn mein Charakter ‚isOnGem‘ oder ‚isOnClosedSwitch ', sollte mein Charakter nicht "navigierenWand". Das Problem damit ist, dass ich nicht verstehe, warum mein logischer Operator AND sein muss (& &), und nicht ODER (||), um korrekt zu laufen. Warum wird 'navigateAroundWall' ausgeführt, wenn nur eine Bedingung erfüllt ist und der AND-Operator verwendet wird?

Unten ist ein Bild, um Ihre Visualisierung des Labyrinths zu erleichtern .. wie Sie sehen können, gibt es keine Fälle, wo mein Charakter auf einem Edelstein und auf einem Schalter (die Kachel in der unteren rechten Ecke) gleichzeitig sein wird Zeit.

Antwort

2

Dies ist eine einfache Anwendung von De Morgan Gesetz: nicht (a oder b) gleich zu keine und nicht

In Ihrem Fall B, wenn ein oder b ist wahr, Sie tun nicht wollen zu diesem Anruf gehen. Dies ist daher gleich der dargestellten if-Bedingung.

Sie könnten es auch schreiben mit oder aber dann müssen Sie es negieren, da Sie nicht wollen, tun Sie es unter diesen Bedingungen.

0

Es gibt De Morgans Gesetze, die Sie wissen sollten, um zu verstehen, wo Ihr Problem ist. Aufgrund von De Morgans Gesetzen ist NICHT (A UND B) NICHT (A) ODER NICHT (B), NICHT (A ODER B) ist NICHT (A) UND NICHT (B). Also, in deinem Code hast du jetzt NICHT (A) UND NICHT (B), was gleich NICHT ist (A ODER B).

Verwandte Themen