2016-09-20 15 views
0

一般的にSwiftとコンピュータサイエンスの新機能です。 Appleのドキュメントに加えて、iPadをSwift Playgroundで教育しています。 Swift Playgroundの中で、私のコードの目標は、迷路を通して私の性格を得ることです。次のコードは正しく私の迷路かかわらず、私を取得します:私の混乱があるのはここ論理演算子 'AND'/'OR' Swift whileループ

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() 
} 

は次のとおりです。

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

正しく私の迷路を移動するには、私の文字が「isOnGem」または「isOnClosedSwitch '、私のキャラクターは' navigateAroundWall 'であってはなりません。これの問題は、私の論理演算子がAND(& &)でなくてはならず、OR(||)が正しく実行されなければならない理由を理解できないことです。条件が1つしかなく、AND演算子が使用されているときに 'navigateAroundWall'が実行されるのはなぜですか?

以下は迷路の視覚化に役立つ画像です。わかるように、私のキャラクターが宝石とスイッチ(右下にあるタイル)に同じように表示されることはありません時間。

答えて

2

これは、ド・モルガンの法則のシンプルなアプリケーションです:ない(AまたはB)がないではなく、あなたのケースで

からB に等しいときまたはBが真である場合ではないその呼び出しに行きたい。したがって、これは提示されるif条件に等しい。

ではないので、それを否定する必要があります。これらの条件では、を実行します。

0

あなたの問題がどこにあるのかを知るために知っておくべきDe Morganの法律があります。 De Morganの法律のため、NOT(A AND B)はNOT(A)OR NOT(B)ではなく、NOT(A OR B)はNOT(A)AND NOT(B)ではありません。したがって、あなたのコードでは、NOT(A)とNOT(B)はNOT(A OR B)と等しくなります。