2017-01-11 7 views
1

Я новичок в кодировании и в настоящее время преподаю себя быстро, используя быстрые игровые площадки на iPad. Мой код работает и завершает головоломку, но он продолжает цикл, и я не знаю, почему. Я не могу найти способ исправить этот код. Хотя я нашел видео на YouTube с различным кодом, написанным по-разному. Я не просто хочу его скопировать. Я хочу понять, почему это не работает. При необходимости я могу отправить видео с головоломкой.понимание того, почему быстрый код не будет работать правильно

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

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

} 
+0

вы измените 'isOnGem' и '' isOnClosedSwitch значение? – Mina

+1

Пожалуйста, как можно ожидать от вас ответа? Вы не даете нам достаточно. Мы получаем проблему - цикл продолжается, вероятно, из-за isOnGem и isOnClosedSwitch всегда является истинным, но из того, что мало нам дал код, который появляется (пожалуйста, это не обязательно ответ), что turnRight(), turnLeft(), collectGem() или toggleSwitch() не устанавливает проверку цикла так, как вы хотите. Не могли бы вы добавить дополнительный код? – dfd

+0

Dfd нет дополнительного кода для добавления. Мне просто нужно было прекратить цикл. Но мне ответили. Спасибо, что ответили. –

ответ

0

Вам не хватает Условия выхода. while !isOnGem || !isOnClosedSwitch будет продолжать цикл до тех пор, пока либо условие равно true, поэтому ваше условие выхода будет иметь оба значения, заданные как false.

Обратите внимание, что оба булева инвертированы в вашем чеке, поэтому для выполнения обоих условий false вам необходимо установить логические значения true.

Поскольку вы прогонов кода и пока не выходит на цикл, вы хотите, чтобы проверить изменения в isOnGem и isOnClosedSwitch там может быть один из двух, всегда false в результате цикла не выходящего или функции, которая выполняется после того, как каждый проверяет, возможно, придется сбросить их false

проверки для кода, как:

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

или одна из функций не может даже работать, вы можете войти каждую функцию, как:

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

и если «toggleSwitchRunning» не печатали в консоли, убедитесь, что условие установлено isOnClosedSwitch к true работает правильно

+0

Спасибо, Бен. Внесет изменения. –

+0

Спасибо, Джейсон. Эта обратная связь действительно помогает. Очень признателен. –

+0

@CashmereTatum, если вам нужна более подробная информация, у вас есть страница [documentation] (http://stackoverflow.com/documentation/swift/topics), в которой есть много полезной информации. Также [Apple] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html # // apple_ref/doc/uid/TP40014097-CH5-ID309) собственная документация для быстрой помощи тоже может помочь –

1

Без какой-либо другой информации относительно функций в каждом из ваших if блоков, я бы сказал, что это из-за ваши логические значения isOnGem и isOnClosedSwitch. Если функция collectGem() не изменяет значение isOnGem в противоположность тому, что изначально было установлено на (true или false), а toggleSwitch() не меняет значение isOnClosedSwitch в противоположность его первоначальному значению, тогда вы будете застряли в петля. Так как цикл будет работать «while», по крайней мере одно из этих значений останется неизменным.

Я считаю, что добавление isOnGem = false и isOnClosedSwitch = false к их соответствующим блокам if будет решением.

+0

Спасибо за то, что ответили на это. –