2017-05-09 32 views
-2

我有以下代碼應該執行兩件事: 1)當temp低於100時爆發火,而blasters不會過熱。 2)等待,直到溫度降到零。在while循環中運行Swift代碼但超時

我不太確定爲什麼下面的代碼超時。我與斯威夫特一個真正的初學者(我在河中間的背景)

var shields = 5 
var blastersOverheating = false 
var blasterFireCount = 0 
var temp = 0 

while shields > 0 { 

    temp = temp + 1 
    blasterFireCount = blasterFireCount + 1 

    if temp == 100{ 
     blastersOverheating = true 
    } 

    if blastersOverheating{ 

     print("Sleeping to cool down to 0") 
     sleep(10) 
     temp = 0 
     blasterFireCount = 0 
     blastersOverheating = false 
     continue 
    } 

    print(temp) 

} 
+2

你認爲那是什麼',而盾牌> 0 {...}'沒有,特別是如果'shields'是行不通修改? –

+0

是的。我不介意它是否不終止,因爲這不是問題。我忘了添加上面的東西,我添加了「打印(溫度)」,因此它可以打印溫度,但它不。 –

+1

然後是什麼問題?代碼在哪裏「超時」?你在哪裏打印變量?你有沒有調試你的程序? –

回答

0

如果你運行一個免費的在線平臺,該代碼(如iswift.org/playground),你的程序會超時,因爲它否則會永遠運行。

爲了解決這個問題,限制你的循環,所以它只能做,例如1000個循環。

查看例如在線:http://swift.sandbox.bluemix.net/#/repl/59123b184ee0cd258050b2cd

var coolingDown = false 
var blasterFireCount = 0 
var temp = 0 

for _ in 0..<1000 { 

    if coolingDown { 
     temp -= 1 
     print("cooling down \(temp)") 

     if temp == 0 { coolingDown = false } 
    } else { 
     temp += 1 
     blasterFireCount += 1 

     print("fire \(blasterFireCount)") 

     if temp == 100 { coolingDown = true } 
    } 

}