2017-05-09 3 views
-2

次の2つのことを行うコードがあります。 1)温度が100未満でブラスターが過熱していない場合のブラスター。 2)温度がゼロになるまで待ちます。whileループでスウィフトコードを実行していますが、タイムアウトします。

タイムアウトのコードがタイムアウトする理由がわかりません。私はあなたが(iswift.org/playgroundのように)無料のオンラインプラットフォーム上でこのコードを実行する場合は、あなたのプログラムがあるためタイムアウトしますスウィフト(私はRの中間のバックグラウンドを持っている)

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

あなたはshields'はどこにも修正されていない場合、 'シールドは> 0 {...}'特に、行いながら 'ことをどう思いますか? –

+0

はい。それが問題ではないので、終了しないかどうか気にしない。私は上記の何かを追加するのを忘れていました。私は "print(temp)"を追加して温度を印刷できるようにしましたが、そうはしません。 –

+1

それで問題は何ですか?コードはどこで「タイムアウト」しますか?変数はどこに印刷しますか?あなたのプログラムをデバッグしましたか? –

答えて

0

と本当の初心者ですそれ以外の場合は永遠に実行されます。

この問題に対処するには、ループを制限して、たとえば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 } 
    } 

} 
関連する問題