MENU

【Kotlin】レッスン2-06:while文とdo-while文を使った繰り返し処理を学ぼう

tggaa478@yahoo.co.jp

一つ前のページではfor文による繰り返し処理について学習しました。

今回は while文による繰り返し処理 について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編

 ・Lesson2-1:比較演算子と論理演算子を理解しよう
 ・Lesson2-2:if文による分岐処理を理解しよう
 ・Lesson2-3:when文による分岐処理を理解しよう
 ・Lesson2-4:スマートキャストを理解しよう
 ・Lesson2-5:for文による繰り返し処理を理解しよう
 ・Lesson2-6:while文による繰り返し処理を理解しよう ◁今回はココ
 ・Lesson2-7:繰り返しを制御しよう
 ・Lesson2-8:エラーメッセージを読めるようになろう
 ・Lesson2-9:例外処理を理解しよう
 ・確認問題2-☆1:ハイアンドローゲームを作ろう
 ・確認問題2-☆2:数字当てゲームを作ろう
 ・確認問題2-☆3:簡単なじゃんけんゲームを作ろう
Lesson3:関数編
Lesson4:コレクション編
Lesson5:オブジェクト指向編

<<前のページ

学習記事一覧

次のページ>>

Kotlinのwhile文とdo-while文の基本構文と違いを解説

繰り返し処理はプログラムにおいて特定のコードを効率的に実行するための重要な機能です。

その中でもKotlinでは「while文」を使用して条件が満たされている間、特定の処理を繰り返すことができます。

本記事ではwhile文の基本構文、使用例、注意点をわかりやすく解説します。

while文とは?条件に応じた基本的な繰り返し構文

while文は条件がtrueである間、指定した処理を繰り返し実行する制御構文です。

この構文を使うことで同じコードを何度も記述する必要がなくなり、効率的なプログラムを書くことができます。

while文の基本的な動作の流れは以下の通りです:

  1. 条件をチェックします。
  2. 条件がtrueであれば、ブロック内の処理を実行します。
  3. 処理が完了すると再び条件をチェックします。
  4. 条件がfalseになるとループを終了します。

while文の書き方|基本構文と使用例

Kotlinにおけるwhile文の基本的な構文は次の通りです。

while (条件式) {
    // 繰り返したい処理
}

例えば1から5までの数値を順に出力するコードは以下のように記述します。

var i = 1
while (i <= 5) {
    println(i) // 現在の値を出力
    i++        // iをインクリメント(i=i+1 と同じ)
}

このコードを実行すると、以下のような順番で動作します。

① 変数iを宣言し1を代入
② whileループ開始。i<=5の条件を満足しているため処理を実行
③ println(i)を実行。iは1なので1と出力
④ i++を実行。iは2になる
⑤ 1周目の繰り返しが終了し、2周目へ移行
⑥ i<=5の条件を満足しているため処理を実行
・・・
⑳ i++を実行。iは6になる
㉑ 5周目の繰り返しが終了
㉒ i<=5の条件を満たさないためwhileループを終了

このように変数iが5以下である間、println(i)が繰り返し実行されます。

do-while文とは?1回は必ず実行される繰り返し構文

while文に似た構文として「do-while文」があります。

do-while文は条件をチェックする前に必ず1回は処理を実行する点が特徴です。

以下がその構文です。

do {
    // 繰り返したい処理
} while (条件式)

次にdo-while文を使った例を見てみましょう。

fun main() {
    var input: String
    do {
        println("文字を入力してください(終了するにはexitと入力):")
        input = readLine() ?: ""
        println("あなたが入力したのは: $input")
    } while (input != "exit")
    println("プログラムが終了しました。")
}

この例ではユーザーがexitを入力するまでループを続けます。

条件式を満たすかどうかに関わらず、最低1回は処理が実行されるため、ユーザーの初回入力を必ず受け取れる構造です。

while文を使うときの注意点|無限ループを防ぐには?

無限ループの防止

while文を使う際には終了条件が必ず満たされることを確認しましょう。

次の例では終了条件が設定されていないため、無限ループが発生します。

var i = 1
while (i > 0) { // 終了条件が存在しない
    println(i)
}

条件式の適切な設定

条件式を正しく設定しないと、意図した通りにループが動作しません。

特に、変数の更新忘れに注意が必要です。

効率性

ループの中で重い処理を繰り返さないように設計しましょう。

while文とdo-while文のまとめ|違いと使い分けのポイント

while文は条件に応じた柔軟な繰り返し処理を可能にする重要な構文です。

またdo-while文を適切に活用することで、特定の状況でより簡潔なコードを書くことができます。

両者の特性を理解し、正しく使い分けることで、より効率的なプログラムを作成できるようになります。

次回は「繰り返し処理の制御」について学びます。より高度な繰り返し操作をマスターしていきましょう。

練習問題|while文で1から入力値までカウントアップするプログラムを作ろう

ユーザーが入力した正の整数まで、1から順に数えるプログラムを作成しましょう。

このプログラムではwhile文を使って繰り返し処理を行い、入力値が1以上の整数である場合に正しく動作します。

また不正な入力が行われた場合に適切なメッセージを表示します。

この問題の要件

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

  1. ユーザーから正の整数を入力してもらい、その値を変数inputに格納すること。
  2. 入力値がnullまたは0以下の場合、「有効な正の整数を入力してください」というメッセージを表示すること。
  3. inputが正の整数である場合、while文を使用して1からその値までカウントアップし、各値を画面に出力すること。
  4. カウント終了後に「カウントが終了しました!」というメッセージを表示すること。

ただし、以下のような実行結果となること。

このプログラムでは、指定した数値までカウントアップを行います。
整数値を入力してください:
5
1から5までの数字を表示します:
1
2
3
4
5
カウントが終了しました!

この問題を解くヒント

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

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

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

1:main関数の定義
  □ プログラムの説明を出力
  □ 「整数値を入力してください:」を出力
  □ ユーザーの入力を取得し、整数に変換して変数inputに代入
  □ if文でinputがnullでなく、かつ正の数値であるかを判定
  □ □ 変数counterを1で初期化
  □ □ 「1から$inputまでの数字を表示します:」を出力
  □ □ while文を使ってcounterがinput以下である間ループ処理を実行
  □ □ □ counterの値を出力
  □ □ □ counterを1増加
  □ □ 「カウントが終了しました!」を出力
  □ else文
  □ □ 「有効な正の整数を入力してください。」を出力

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

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

fun main() {
    // プログラムの説明
    println("このプログラムでは、指定した数値までカウントアップを行います。")
    println("整数値を入力してください:")

    // 入力の受け取り
    val input = readLine()?.toIntOrNull() // 入力を整数に変換 (Null安全性を利用)
    
    // 入力が有効な数値か確認する
    if (input != null && input > 0) {
        var counter = 1 // カウンタ変数を初期化
        println("1から$inputまでの数字を表示します:")

        /*【穴埋め問題1】
        ここにwhile文を使用してcounterがinput以下の間、ループを実行するコードを書いてください。
        */

        println("カウントが終了しました!")
    } else {
        // 入力が不正だった場合の処理
        println("有効な正の整数を入力してください。")
    }
}

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

練習問題の解答と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
fun main() {
    // プログラムの説明
    println("このプログラムでは、指定した数値までカウントアップを行います。")
    println("整数値を入力してください:")

    // 入力の受け取り
    val input = readLine()?.toIntOrNull() // 入力を整数に変換 (Null安全性を利用)
    
    // 入力が有効な数値か確認する
    if (input != null && input > 0) {
        var counter = 1 // カウンタ変数を初期化
        println("1から$inputまでの数字を表示します:")

        // while文を使用してカウントアップ
        while (counter <= input) {
            println(counter) // 現在のカウントを出力
            counter++ // カウンタを1増やす
        }

        println("カウントが終了しました!")
    } else {
        // 入力が不正だった場合の処理
        println("有効な正の整数を入力してください。")
    }
}
Q
正解コードの解説

コードをブロックごとに分割して解説します。

プログラムの説明と入力受付

println("このプログラムでは、指定した数値までカウントアップを行います。")
println("整数値を入力してください:")
val input = readLine()?.toIntOrNull()
  • println: Kotlinの基本的な出力方法で、文字列をコンソールに表示します。
  • readLine(): コンソールからユーザーの入力を取得します。
  • toIntOrNull: 入力された文字列を整数に変換しますが、無効な入力の場合はnullを返します。この方法により、エラーを回避できます(Null安全性)。

入力値の検証

if (input != null && input > 0) {
    var counter = 1
    println("1から$inputまでの数字を表示します:")
  • if文: 条件による分岐処理を実行します。ここではinputnullでなく、正の整数である場合のみ処理を続けます。
  • counter: 繰り返し処理で使うカウンタ変数を宣言します。
  • 文字列テンプレート$inputを使うことで、変数の値を文字列に埋め込むことができます。

while文による繰り返し処理

while (counter <= input) {
    println(counter)
    counter++
}
  • while文: 条件がtrueである間、指定した処理を繰り返します。この場合counterinput以下である間、ループを実行します。
  • counter++counterを1ずつ増やしてカウントアップを進めます。
  • ループの役割: 条件がfalseになるまで繰り返すため、入力値までの連続した値を出力するのに適しています。

カウント終了後のメッセージ

println("カウントが終了しました!")
  • 繰り返し処理が終わった後に、完了メッセージを出力します。

不正な入力への対応

} else {
    println("有効な正の整数を入力してください。")
}
  • else文: ユーザーが無効な入力をした場合に、エラーメッセージを表示します。この部分はif文に対応しています。

まとめ

このコードではKotlinの基本的な構文(入力と出力、条件分岐、繰り返し処理)を使用して、初心者にも理解しやすいプログラムを構築しました。

特にwhile文による繰り返し処理が重要な部分です。while文は条件が満たされている間処理を続ける構文で、カウントアップや繰り返し作業に適しています。

次に進む前に、このコードを参考にして、自分で繰り返し処理を利用した応用プログラムを作成してみましょう!

もっと分かりやすいサイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいKotlin学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました