2016-09-20 119 views
0

我是Swift和計算機科學領域的新手。除了Apple文檔,我還在iPad上使用Swift Playground來補充我的教育。在Swift Playground中,我的代碼的目標是讓我的角色通過迷宮。下面的代碼將正確地得到我,雖然我的迷宮:Swift while循環中的邏輯運算符'AND'/'OR'

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(||)才能正確運行。當只有一個條件爲真且使用AND運算符時,爲什麼執行'navigateAroundWall'?

下面是一個圖像,以幫助你形象化的迷宮..你可以看到沒有任何情況下,我的角色將在一個寶石和一個開關(瓷磚在右下角)在同一個時間。

回答

2

這是德·摩根定律的簡單應用:不是(A或B)等於不是和非B

在你的情況,當一個b是真的你做不是想要去那個電話。因此,這等於所提出的條件。

你也可以寫它或但你需要否定它,因爲你做不是想要在這些條件下做到這一點。

0

有德摩根的法律,你應該知道明白你的問題在哪裏。由於德摩根的法律不是(A和B)不是(A)或不是(B),而不是(A或B)不是(A)和不是(B)。因此,在你的代碼中,你沒有(A)和(B)不等於NOT(A或B)。