理解为什么 swift 代码不能正常工作

understanding why swift code won't work correctly

我是编码新手,目前在 iPad 上使用 swift 个游乐场自学 swift。我的代码运行并完成了拼图,但它继续循环,我不知道为什么。我找不到任何方法来更正此代码。尽管我在 YouTube 上发现了各种代码编写方式不同的视频。我不只是想复制它。我想了解为什么这不起作用。如果需要,我可以发送拼图视频。

while !isOnGem || !isOnClosedSwitch  {
    moveForward()
    if isBlocked && !isBlockedRight {
        turnRight()

    }
    if isBlocked && isBlockedRight {
        turnLeft()
    }
    if isOnGem {
        collectGem()
    }
    if isOnClosedSwitch {
        toggleSwitch()
    }

} 

如果没有关于每个 if 块中函数的任何其他信息,我会说这是由于 isOnGemisOnClosedSwitch 的布尔值所致。如果函数 collectGem() 没有将 isOnGem 的值更改为与初始设置相反的值(true 或 false)并且 toggleSwitch() 没有更改 [=12 的值=] 与它的原始值相反,那么你将陷入循环。由于循环将 运行 "while" 至少其中一个值保持不变。

我相信在各自的 if 块中添加 isOnGem = falseisOnClosedSwitch = false 将是解决方案。

您缺少退出条件。只要 任一 条件为 truewhile !isOnGem || !isOnClosedSwitch 就会继续循环,因此您的退出条件将把两个值都设置为 false

请注意,两个布尔值在您的检查中都被反转,因此要满足两个条件 false,您必须将布尔值设置为 true

由于您编写了 运行s 但没有退出循环,因此您需要检查对 isOnGemisOnClosedSwitch 的更改,这两个可能是其中之一总是 false 导致循环不退出,或者每次检查后 运行s 的函数可能将它们重置为 false

检查如下代码:

func collectGem(){
    ...
    isOnGem = false
    ...
}

或者其中一个函数甚至可能没有 运行,您可以像这样记录每个函数:

func toggleSwitch() {
    print("toggleSwitchRunning")
}

如果 "toggleSwitchRunning" 没有打印到控制台,请检查将 isOnClosedSwitch 设置为 true 的条件是否正常工作