【Kotlin】レッスン1-☆1:ランダムなパスワード生成|substringと乱数で作成

一つ前のページではimport文について学習しました。
今回は ランダムパスワード を作成してみましょう。
Lesson1:基礎文法編
・Lesson1-1:Kotlin学習の入り口|初めてコードを書いてみよう
・Lesson1-2:変数と定数を理解しよう
・Lesson1-3:四則演算をしよう
・Lesson1-4:Null安全性を理解しよう
・Lesson1-5:文字列の連結と埋め込みを理解しよう
・Lesson1-6:文字列を操作しよう
・Lesson1-7:import文を理解しよう
・確認問題1-☆1:ランダムパスワードを生成しよう ◁今回はココ
Lesson2:制御構造編
Lesson3:関数編
Lesson4:コレクション編
Lesson5:オブジェクト指向編
確認問題|ランダムパスワードの生成を通じて文字列操作と乱数を学ぼう

ユーザー名を入力し、簡易的なランダムパスワードを生成するプログラムを作成しましょう。
このプログラムではユーザーが入力した名前の先頭4文字に、ランダムに生成された4桁の数字を結合してパスワードを作成します。
作成されたパスワードとユーザー名を表示することが目標です。
この問題の要件
以下の要件に従ってコードを完成させてください。
- 入力: ユーザーがアルファベットで4文字以上の名前を入力すること。
- 部分文字列の抽出: ユーザー名の先頭4文字を取得し、
passName
に格納すること。 - 乱数生成:
1000
から9999
までの4桁の乱数を生成し、numPass
に格納すること。 - 文字列の結合:
passName
とnumPass
を結合し、pass
というパスワードを作成すること。 - 出力:
- ランダムなパスワードが生成されたことを通知するメッセージ。
- 入力されたユーザー名と生成されたパスワードを出力すること。
ただし、以下のような実行結果となること。
新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください: Hiroki ランダムなパスワードを作成しました。 ユーザー名:Hiroki パスワード:Hiro8371
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:
Random
モジュールをインポート
2:main
関数の定義
□ 「新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:」と出力
□ ユーザーの入力を取得し、変数name
に代入(nullの場合はデフォルト値”nanashi”を設定)
□ 変数name
の先頭4文字を取得し、変数passName
に代入
□ 1000〜9999の範囲でランダムな数値を生成し、変数numPass
に代入
□ 変数passName
とnumPass
を連結し、変数pass
に代入
□ 「ランダムなパスワードを作成しました。」と出力
□ 「ユーザー名:{name}」と出力
□ 「パスワード:{pass}」と出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import kotlin.random.Random fun main() { // 1. 新規登録メッセージを表示 println("新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:") // 2. ユーザー名を入力し、変数nameに保存 /* 【穴埋め問題1】ここでユーザーから入力を受け取り、それを変数nameに代入するコードを書いてください。nullの場合はデフォルト値"nanashi"を設定してください。 */ // 3. nameの先頭4文字を取得し、変数passNameに保存 /* 【穴埋め問題2】nameの先頭4文字を取得し、それを変数passNameに代入するコードを書いてください。 */ // 4. 4桁の乱数を生成し、変数numPassに保存 /* 【穴埋め問題3】1000〜9999の範囲でランダムな数値を生成し、それを変数numPassに代入するコードを書いてください。 */ // 5. passNameとnumPassを連結して、変数passに保存 /* 【穴埋め問題4】passNameとnumPassを連結して、それを変数passに代入するコードを書いてください。 */ // 6. ランダムなパスワード生成完了メッセージを表示 println("ランダムなパスワードを作成しました。") // 7. ユーザー名とパスワードを表示 println("ユーザー名:$name") println("パスワード:$pass") }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
import kotlin.random.Random fun main() { // 1. 新規登録メッセージを表示 println("新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:") // 2. ユーザー名を入力し、変数nameに保存 val name = readLine() ?: "nanashi" // 3. nameの先頭4文字を取得し、変数passNameに保存 val passName = name.substring(0, 4) // 4. 4桁の乱数を生成し、変数numPassに保存 val numPass = Random.nextInt(1000, 10000) // 1000〜9999の4桁の乱数 // 5. passNameとnumPassを連結して、変数passに保存 val pass = "$passName$numPass" // 6. ランダムなパスワード生成完了メッセージを表示 println("ランダムなパスワードを作成しました。") // 7. ユーザー名とパスワードを表示 println("ユーザー名:$name") println("パスワード:$pass") }
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
ユーザー名の入力
println("新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:") val name = readLine() ?: "nanashi"
println
: コンソールにメッセージを出力するための関数です。ここでは「新規登録を開始する」メッセージを表示しています。readLine()
: ユーザーが入力した文字列を取得します。?: "nanashi"
は万が一入力が空だった場合にデフォルト値として”nanashi”を代入する処理です。
入力されたユーザー名の一部を取り出す
val passName = name.substring(0, 4)
substring(0, 4)
: 入力された文字列の先頭4文字を切り出します。この関数は0
から4
のインデックス範囲の文字を取得します。例:
name = "Alice"
の場合、passName = "Alic"
となります。ランダムな4桁の数字を生成
val numPass = Random.nextInt(1000, 10000)
Random.nextInt(1000, 10000)
: Kotlinのランダム数生成機能を使用して、1000から9999までの範囲で乱数を生成します。この範囲は4桁の数字を保証します。
パスワードの生成
val pass = "$passName$numPass"
"$passName$numPass"
: Kotlinの文字列テンプレートを使って、passName
とnumPass
を連結しています。これが最終的なパスワードになります。例:
passName = "Alic"
、numPass = 1234
の場合、pass = "Alic1234"
となります。結果の出力
println("ランダムなパスワードを作成しました。") println("ユーザー名:$name") println("パスワード:$pass")
println
: 生成されたパスワードを含む結果をコンソールに出力します。
まとめ
このコードではKotlinの基本的な文字列操作(substring
や文字列テンプレート)、ユーザー入力の取得(readLine
)、およびランダム数生成(Random.nextInt
)について学べます。
シンプルな構造ですが実用的なパスワード生成の方法を示しており、Kotlinの入門者にとって良い学習素材です。