Kotlinの初心者向け問題1-4:when文の使用
この問題を解くために必要な知識:
コメントの書き方、変数と定数、基本データ型、算術演算と論理演算、入力と出力、import文、配列、分岐処理(if、if~else、when)、繰り返し処理(for、while、do~while)、Null安全、スマートキャスト
<<前の問題 | 問題集Top |
次の問題>> |
Kotlinの文法「when文」とは
ここではwhen文の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。
Kotlinでは、複雑な条件分岐をシンプルに記述できる「when
文」が提供されています。
この記事では、when
文の基本的な使い方や便利な使い方を、わかりやすく解説します。
when文とは?
when
文は、Javaや他の言語で使われるswitch
文と似た機能を持っていますが、Kotlinではさらに柔軟で強力な条件分岐を実現できます。
特定の条件に一致した場合に、対応する処理を実行するために使われます。
基本的なwhen文の使い方
when
文の基本的な構文は以下の通りです。
when (条件) { 値1 -> 処理1 値2 -> 処理2 else -> その他の処理 }
when
文では、指定した条件が特定の値に一致するかどうかを順番にチェックし、一致した場合に対応する処理を実行します。
else
はどの条件にも一致しなかった場合に実行される処理です。
例: when文の基本
fun main() { val day = 3 when (day) { 1 -> println("Monday") 2 -> println("Tuesday") 3 -> println("Wednesday") 4 -> println("Thursday") 5 -> println("Friday") else -> println("Weekend") } }
この例では、day
の値によって、対応する曜日が出力されます。
もしday
が1であれば「Monday」が、3であれば「Wednesday」が表示されます。
それ以外の値の場合はelse
ブロックが実行され、「Weekend」が表示されます。
複数の条件をまとめる
Kotlinのwhen
文では、複数の条件をまとめて一つの処理に対応させることができます。
例: 複数条件の指定
fun main() { val day = 6 when (day) { 1, 2, 3, 4, 5 -> println("Weekday") 6, 7 -> println("Weekend") else -> println("Invalid day") } }
この例では、day
が1から5のいずれかであれば「Weekday」、6または7であれば「Weekend」が表示されます。
条件をカンマで区切ることで、複数の値に対して同じ処理を行うことができます。
式としてのwhen文
Kotlinのwhen
文は、式としても使用でき、結果を変数に代入することができます。
これは、値を返す処理をシンプルに書けるため、非常に便利です。
例: 式としてのwhen文
fun main() { val number = 4 val result = when (number) { 1 -> "One" 2 -> "Two" 3 -> "Three" else -> "Unknown" } println(result) // 出力: Unknown }
この例では、when
文が式として使われており、number
の値に応じた文字列がresult
に代入されます。
number
が1から3でなければ、else
ブロックが実行され、"Unknown"
がresult
に代入されます。
条件式を使ったwhen文
when
文では、単なる値だけでなく、条件式を使うこともできます。これにより、より柔軟な分岐処理が可能になります。
例: 条件式を使ったwhen文
fun main() { val number = 10 when { number % 2 == 0 -> println("$number は偶数です") number % 2 != 0 -> println("$number は奇数です") else -> println("不正な値です") } }
この例では、when
文がnumber
の値に応じて条件式を評価し、偶数か奇数かを判定しています。
when
文の引数を省略し、各条件式がtrue
の場合に対応する処理を実行します。
値の範囲を使ったwhen文
when
文では、特定の値の範囲に応じた処理を記述することも可能です。
例: 範囲を使ったwhen文
fun main() { val score = 85 when (score) { in 90..100 -> println("Excellent!") in 70..89 -> println("Good job!") in 50..69 -> println("Not bad!") else -> println("Keep trying!") } }
この例では、score
の値が特定の範囲内にあるかどうかをwhen
文でチェックしています。
範囲内にある場合は対応するメッセージが出力されます。in
キーワードを使って、数値の範囲を指定できます。
まとめ
Kotlinのwhen
文は、シンプルな条件分岐から複雑な条件式まで対応できる強力な構文です。
値の比較だけでなく、複数の条件をまとめたり、式として結果を返すこともでき、Kotlinプログラミングをより簡潔に記述することができます。
この記事で紹介した基本的な使い方を実際に試しながら、when
文を使いこなしてみてください!
Kotlin練習問題1-4_when文の使用
ユーザーに1から7までの数字を入力してもらい、対応する曜日を出力するプログラムを作成してください。
1は「月曜日」、2は「火曜日」…7は「日曜日」とします。
この問題の要件
以下の要件に従ってプログラムを作成してください。
readLine()
を使用してユーザーからの入力を取得し、それを整数に変換してください。if
文を使って、ユーザーが有効な数字(1から7)を入力したかどうかをチェックしてください。when
文を使って、入力された数字に対応する曜日を表示してください。- 無効な入力に対して適切なメッセージを表示してください。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
1から7までの数字を入力してください: 3 水曜日 1から7までの数字を入力してください: 9 無効な入力です。1から7までの数字を入力してください。
----- ↑出力される結果の例↑ ----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.main関数の定義
1-1. ユーザーに1から7までの数字を入力させるためのメッセージを表示
1-2. ユーザーからの入力を取得し、整数に変換してday
に格納
1-3. if
文を使ってday
がnullでないことを確認
1-3-1. when
文を使って入力された数字に対応する曜日を表示
1-3-2. 範囲外の数字が入力された場合のメッセージを表示
1-4. else
文を使って、day
がnullの場合のエラーメッセージを表示
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
fun main() { // ユーザーに1から7までの数字を入力してもらうように指示 print("1から7までの数字を入力してください: ") val input = readLine() val day = input?.toIntOrNull() // 入力された数字に対応する曜日を出力するためのwhen文 if (day != null) { /* ***【穴埋め問題1】*** ここにwhen文を使用して、dayの値に応じて対応する曜日を出力するコードを書いてください。 1なら月曜日、2なら火曜日、3なら水曜日、4なら木曜日、5なら金曜日、6なら土曜日、7なら日曜日を表示するようにしてください。 それ以外の数字の場合には「無効な入力です。1から7までの数字を入力してください。」と表示するコードを書いてください。 */ } else { println("無効な入力です。1から7までの数字を入力してください。") } }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
fun main() { // ユーザーに1から7までの数字を入力してもらうように指示 print("1から7までの数字を入力してください: ") val input = readLine() val day = input?.toIntOrNull() // 入力された数字に対応する曜日を出力するためのwhen文 if (day != null) { when (day) { 1 -> println("月曜日") 2 -> println("火曜日") 3 -> println("水曜日") 4 -> println("木曜日") 5 -> println("金曜日") 6 -> println("土曜日") 7 -> println("日曜日") else -> println("無効な入力です。1から7までの数字を入力してください。") } } else { println("無効な入力です。1から7までの数字を入力してください。") } }
********************
正解コードの解説
このKotlinプログラムは、ユーザーに1から7までの数字を入力してもらい、その数字に対応する曜日を表示するプログラムです。
コードの各部分を順に説明します。
ユーザーに数字を入力させる
print("1から7までの数字を入力してください: ") val input = readLine() val day = input?.toIntOrNull()
最初に、print
関数を使ってユーザーに1から7までの数字を入力するよう促します。
readLine()
関数でユーザーの入力を受け取り、それをtoIntOrNull()
メソッドで整数に変換します。もし入力が数字でなかった場合、このメソッドはnull
を返します。
入力値が有効かどうか確認する
if (day != null) {
次に、if
文を使用して、day
がnull
でないことを確認します。これは、ユーザーが有効な数字を入力したかどうかをチェックするためです。
when文で曜日を判定する
when (day) { 1 -> println("月曜日") 2 -> println("火曜日") 3 -> println("水曜日") 4 -> println("木曜日") 5 -> println("金曜日") 6 -> println("土曜日") 7 -> println("日曜日") else -> println("無効な入力です。1から7までの数字を入力してください。") }
when
文を使って、day
に対応する曜日を判定し、println
関数で結果を表示します。
else
ブロックでは、1から7以外の数字が入力された場合にエラーメッセージを表示します。
エラーメッセージの表示
} else { println("無効な入力です。1から7までの数字を入力してください。") }
day
がnull
の場合、つまりユーザーが有効な数字を入力しなかった場合、else
ブロック内のエラーメッセージが表示されます。これにより、ユーザーは再入力を促されます。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。