Swift while循环中的逻辑运算符'AND'/'OR'

时间:2016-09-20 06:24:48

标签: ios swift swift-playground

我是Swift和计算机科学的新手。除Apple文档外,我还在iPad上使用Swift Playground来补充我的教育。在Swift Playground中,我的代码的目标是通过迷宫获取我的角色。以下代码将正确地获取我的迷宫:

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 个答案:

答案 0 :(得分:2)

这是De Morgan定律的一个简单应用: not(a或b)等于不是a而不是b

如果 a b 为true,则想要转到该呼叫。因此,这等于所呈现的if条件。

你也可以用它来写它,但是你需要否定它,因为想要在这些条件下这样做。

答案 1 :(得分:0)

你应该知道De Morgan的法律,以了解你的问题在哪里。由于De Morgan定律,NOT(A和B)不是(A)或不是(B),NOT(A或B)不是(A)和NOT(B)。所以,在你的代码中你现在没有(A)和NOT(B)等于NOT(A OR B)。