Swift教室 Swift と競技プログラミングの教室

while 文

読了目安 約2分

条件が真の間ブロックを繰り返す while 文。無限ループの避け方も学ぶ。

この章の目次

同じ処理を 100 回書かずに、100 回繰り返させたい。 その最初の道具が while 文です。

while 文

while 文は、条件が true の間、ブロックを繰り返し実行します。

Swift
while 条件 {
    繰り返す処理
}

カウントダウンを書いてみます。

Swift
var count = 5
while count > 0 {
    print(count)
    count -= 1
}
print("リフトオフ!")

流れは「条件を確かめる → true ならブロックを実行 → 条件に戻る」の繰り返しです。 count が 0 になると条件が false になり、while 文の次の行へ進みます。 最初から条件が false なら、ブロックは一度も実行されません。

無限ループ

条件がいつまでも false にならないと、繰り返しは永遠に終わりません。 これを無限ループと呼びます。

Swift
var count = 5
while count > 0 {
    print(count)
    // count -= 1 を書き忘れた!
}

このプログラムは 5 を出力し続けて止まりません。 このサイトのエディタでは数秒で強制終了されますが、手元の環境では止まらないままです。 while 文を書いたら、条件を false に近づける更新がブロックの中にあるかを確かめてください。

カウンタと累積を組み合わせる

1 から N までの合計を while 文で計算します。

Swift
let n = Int(readLine()!)!
var i = 1
var sum = 0
while i <= n {
    sum += i
    i += 1
}
print(sum)
入力例
10

カウンタ i が 1 から N まで進み、そのたびに sum へ足し込まれます。 前章の 2 つの定型句が、繰り返しの中でつながりました。

試してみよう: 標準入力を 100 に変えて、出力が 5050 になることを確かめてください。

学びどころ

概念一言まとめ
while 文条件が true の間ブロックを繰り返す
無限ループ条件が false にならず止まらない状態
更新の確認ブロック内に条件を変える処理があるかを必ず見る

演習

整数 N が入力されます。 # でできた N 段の階段を出力してください。 上から i 行目には # を i 個並べます。

制約: 1 ≤ N ≤ 50

テキスト
入力例:
3

出力例:
#
##
###
模範解答

1 行進むたびに、文字列の末尾へ # を 1 個足してから出力します。

Swift
let n = Int(readLine()!)!
var line = ""
var i = 1
while i <= n {
    line += "#"
    print(line)
    i += 1
}