2016-09-20 120 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)。