【Kotlin】レッスン2-07:繰り返しを制御しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:繰り返しの制御

この記事の練習問題を解くために必要な知識:
基礎文法(レッスン1)比較演算子と論理演算子if文による分岐処理when文による分岐処理スマートキャストfor文による繰り返し処理while文による繰り返し処理繰り返しの制御エラーメッセージ例外処理

<<前のページ Kotlin記事一覧 次のページ>>

Kotlinの「繰り返しの制御」とは

この章ではKotlinにおける「繰り返しの制御」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。




繰り返し処理は同じ処理を効率的に実行するために用いられますが、場合によっては処理を途中で終了させたり、特定の条件をスキップしたいことがあります。

Kotlinではそれを実現するためにbreak文continue文が準備されています。

この記事では、それぞれの使い方や注意点を解説します。

break文とは?

break文は繰り返し処理を途中で終了させるための構文です。

これにより繰り返し条件を満たさなくても強制的にループを抜けることができます。

例えば以下のコードでは、リストの中から特定の値を見つけた時点でループを終了します。

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)
    for (number in numbers) {
        if (number == 3) {
            println("3が見つかりました。ループを終了します。")
            break
        }
        println("現在の値: $number")
    }
}

このコードを実行すると以下のように出力されます。

現在の値: 1
現在の値: 2
3が見つかりました。ループを終了します。

continue文とは?

continue文は現在の繰り返し処理をスキップして、次の繰り返しに進むための構文です。

ループ全体を終了させるのではなく、特定の条件に基づいて一部の処理を飛ばしたい場合に便利です。

以下の例では偶数の場合にスキップしています。

fun main() {
    for (i in 1..5) {
        if (i % 2 == 0) {
            println("$i は偶数なのでスキップします。")
            continue
        }
        println("現在の値: $i")
    }
}

このコードを実行すると以下のように出力されます。

現在の値: 1
2 は偶数なのでスキップします。
現在の値: 3
4 は偶数なのでスキップします。
現在の値: 5

breakとcontinueの使い分け

break文continue文の主な違いは、繰り返し処理全体を終了するか、それとも特定の処理をスキップするかです。

文法 動作 使用例
break ループ全体を終了 検索対象が見つかった場合、処理を終了する
continue 現在の処理をスキップし次の反復に進む 条件を満たさない場合にその処理を無視する

どちらを使用するべきかは、実現したい動作によって異なります。

使用例と注意点

次に実際のシナリオでのbreakとcontinueの使い方を見てみましょう。

以下はユーザーが入力した値に基づいて繰り返し処理を行い、特定の条件でループを終了またはスキップする例です。

fun main() {
    while (true) {
        println("整数を入力してください(-1で終了):")
        val input = readLine()?.toIntOrNull() ?: continue
        if (input == -1) {
            println("プログラムを終了します。")
            break
        }
        if (input < 0) {
            println("負の数はスキップします。")
            continue
        }
        println("入力値は: $input")
    }
}

動作:

  • ユーザーが-1を入力した場合、ループが終了します。
  • 負の数を入力した場合、その処理をスキップし次の入力を促します。

注意点:

  • break文の使い過ぎ: プログラムの途中で処理を終了すると、コードが読みにくくなることがあります。ロジックを整理して、必要最低限で使用することを心がけましょう。
  • continue文と無限ループ: continue文を使用する際は、ループが無限に繰り返されないよう条件を正しく設定してください。

まとめ

Kotlinのbreak文continue文は繰り返し処理を柔軟に制御するための重要な機能です。

break文はループを途中で終了させ、continue文は特定の処理をスキップします。

これらを使いこなすことで効率的で分かりやすいコードを書くことができます。

初心者の方は実際にサンプルコードを実行して挙動を確認することで理解を深めてください。

繰り返しの制御の練習問題:中断とスキップを体験しよう

Kotlinの繰り返し処理を制御する方法について学びましょう。

この練習問題では繰り返しを終了するbreak文と、繰り返しの一部をスキップするcontinue文の使い方を実際のコードで体験します。

以下の要件を満たすプログラムを作成してください。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. for文を使い、数値の範囲(1から5)をループすること。
    • 数字が3の場合にbreak文を使用してループを終了すること。
  2. for文を使い、同じ範囲の数値をループすること。
    • 偶数の場合にcontinue文を使用してその数値をスキップすること。
  3. while文を使い、カウンタ変数を初期化して1ずつ増やしながらループすること。
    • カウンタが3を超えた場合にbreak文を使用してループを終了すること。
  4. while文を使い、1から5の範囲でカウンタをループすること。
    • カウンタが偶数の場合にcontinue文を使用してその数値をスキップすること。
  5. 各ループで現在の値や終了理由を分かりやすく出力すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

ループを制御する例を始めます。

for文でbreakの例:
現在の値: 1
現在の値: 2
3が見つかったのでループを終了します。

for文でcontinueの例:
1
2 は偶数なのでスキップします。
現在の値: 3
4 は偶数なのでスキップします。
現在の値: 5

while文でbreakの例:
カウンタの値: 1
カウンタの値: 2
カウンタが3を超えたのでループを終了します。

while文でcontinueの例:
1
2 は偶数なのでスキップします。
現在の値: 3
4 は偶数なのでスキップします。
現在の値: 5

ループの制御例が終了しました。

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:main関数の定義
  □ 「ループを制御する例を始めます。」と出力
  □ for文によるループの開始(1から5まで繰り返し)
  □ □ if文で現在の値が3であるかを判定
  □ □ □ 真の場合、「3が見つかったのでループを終了します。」と出力し、breakでループを終了
  □ □ 偽の場合、現在の値を出力
  □ 「for文でcontinueの例:」と出力
  □ for文によるループの開始(1から5まで繰り返し)
  □ □ if文で現在の値が偶数であるかを判定
  □ □ □ 真の場合、現在の値を出力しcontinueで次のループに移行
  □ □ 偽の場合、現在の値を出力
  □ 「while文でbreakの例:」と出力
  □ 変数counterを1に初期化
  □ while文による無限ループの開始
  □ □ if文でcounterが3を超えているかを判定
  □ □ □ 真の場合、「カウンタが3を超えたのでループを終了します。」と出力し、breakでループを終了
  □ □ 偽の場合、カウンタの値を出力し、counterに1を加算
  □ 「while文でcontinueの例:」と出力
  □ 変数counterを0に初期化
  □ while文によるループの開始(counterが5未満の間繰り返し)
  □ □ counterに1を加算
  □ □ if文でcounterが偶数であるかを判定
  □ □ □ 真の場合、現在の値を出力しcontinueで次のループに移行
  □ □ 偽の場合、現在の値を出力
  □ 「ループの制御例が終了しました。」と出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

fun main() {
    // 繰り返し処理を制御するKotlinコード

    println("ループを制御する例を始めます。")

    // 1. for文でbreakを使用
    println("\nfor文でbreakの例:")
    for (i in 1..5) {
        /*【穴埋め問題1】
        ここにif文を使用して、値が3の場合に「3が見つかったのでループを終了します。」と出力し、breakでループを終了するコードを書いてください。
        */
        println("現在の値: $i")
    }

    // 2. for文でcontinueを使用
    println("\nfor文でcontinueの例:")
    for (i in 1..5) {
        /*【穴埋め問題2】
        ここにif文を使用して、偶数の場合に「○ は偶数なのでスキップします。」と出力し、continueで次の反復に進むコードを書いてください。
        */
        println("現在の値: $i")
    }

    // 3. while文でbreakを使用
    println("\nwhile文でbreakの例:")
    var counter = 1
    while (true) { // 無限ループを使う例
        /*【穴埋め問題3】
        ここにif文を使用して、counterが3を超えた場合に「カウンタが3を超えたのでループを終了します。」と出力し、breakでループを終了するコードを書いてください。
        */
        println("カウンタの値: $counter")
        counter++
    }

    // 4. while文でcontinueを使用
    println("\nwhile文でcontinueの例:")
    counter = 0
    while (counter < 5) {
        counter++
        /*【穴埋め問題4】
        ここにif文を使用して、counterが偶数の場合に「○ は偶数なのでスキップします。」と出力し、continueで次の反復に進むコードを書いてください。
        */
        println("現在の値: $counter")
    }

    println("\nループの制御例が終了しました。")
}

以上がこの問題の穴埋めコードです。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



練習問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

fun main() {
    // 繰り返し処理を制御するKotlinコード

    println("ループを制御する例を始めます。")

    // 1. for文でbreakを使用
    println("\nfor文でbreakの例:")
    for (i in 1..5) {
        if (i == 3) {
            println("3が見つかったのでループを終了します。")
            break // ループを終了
        }
        println("現在の値: $i")
    }

    // 2. for文でcontinueを使用
    println("\nfor文でcontinueの例:")
    for (i in 1..5) {
        if (i % 2 == 0) {
            println("$i は偶数なのでスキップします。")
            continue // この反復をスキップ
        }
        println("現在の値: $i")
    }

    // 3. while文でbreakを使用
    println("\nwhile文でbreakの例:")
    var counter = 1
    while (true) { // 無限ループを使う例
        if (counter > 3) {
            println("カウンタが3を超えたのでループを終了します。")
            break // ループを終了
        }
        println("カウンタの値: $counter")
        counter++
    }

    // 4. while文でcontinueを使用
    println("\nwhile文でcontinueの例:")
    counter = 0
    while (counter < 5) {
        counter++
        if (counter % 2 == 0) {
            println("$counter は偶数なのでスキップします。")
            continue // 偶数をスキップ
        }
        println("現在の値: $counter")
    }

    println("\nループの制御例が終了しました。")
}

正解コードの解説

このプログラムはKotlinの「繰り返しの制御」を学ぶことを目的としたコードです。

繰り返し処理を途中で終了させるbreak文と、特定の条件でスキップするcontinue文の使い方を解説します。

for文でbreakを使用

println("for文でbreakの例:")
for (i in 1..5) {
    if (i == 3) {
        println("3が見つかったのでループを終了します。")
        break // ループを終了
    }
    println("現在の値: $i")
}

このコードではfor文を使って1から5までの数値をループしています。

if文i == 3の場合にbreakを実行し、ループを終了します。

ポイント: breakは繰り返し処理を即座に終了するため、後続の処理はスキップされます。

for文でcontinueを使用

println("\nfor文でcontinueの例:")
for (i in 1..5) {
    if (i % 2 == 0) {
        println("$i は偶数なのでスキップします。")
        continue // この反復をスキップ
    }
    println("現在の値: $i")
}

ここではfor文を使い1から5の数値をループしますが、偶数の場合はcontinueを使ってその反復処理をスキップします。

ポイント: continueは現在の繰り返し処理だけを中断し、次のループに進みます。

while文でbreakを使用

println("\nwhile文でbreakの例:")
var counter = 1
while (true) { // 無限ループ
    if (counter > 3) {
        println("カウンタが3を超えたのでループを終了します。")
        break // ループを終了
    }
    println("カウンタの値: $counter")
    counter++
}

このコードではwhile文を使い無限ループを作成しています。

counterが3を超えたらbreakを使用してループを終了します。

ポイント: 無限ループを安全に終了するためにbreakが使用されます。

while文でcontinueを使用

println("\nwhile文でcontinueの例:")
counter = 0
while (counter < 5) {
    counter++
    if (counter % 2 == 0) {
        println("$counter は偶数なのでスキップします。")
        continue // 偶数をスキップ
    }
    println("現在の値: $counter")
}

ここではwhile文を使い、偶数の場合にcontinueを使用してその処理をスキップします。

ポイント: while文continueの組み合わせで、条件を満たす場合のみ特定の処理を飛ばすことができます。

まとめ

このプログラムではbreakcontinueの使い方を学びました。

  • break文: 繰り返し処理を即座に終了します。
  • continue文: 現在の処理をスキップし、次のループに進みます。

これらの制御文を活用すると無駄な処理を避けることができ、効率的なコードを書くことができます。

Kotlinの基本的なループ構造と制御文を理解し、実践的なプログラムを作成する際に活用してください。

<<前のページ Kotlin記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Kotlinのテキスト&問題集トップへ戻る
    トップページへ戻る