【Kotlin】確認問題1-☆1:ランダムパスワードを生成しよう

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

この記事の練習問題で使用する知識:
メイン関数入力と出力の基本コメントの書き方変数と定数算術演算子Null安全性文字列の連結と埋め込み文字列操作import文

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

確認問題:ランダムパスワードを生成しよう

ユーザー名を入力し、簡易的なランダムパスワードを生成するプログラムを作成しましょう。

このプログラムではユーザーが入力した名前の先頭4文字に、ランダムに生成された4桁の数字を結合してパスワードを作成します。

作成されたパスワードとユーザー名を表示することが目標です。

この問題の要件

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

  1. 入力: ユーザーがアルファベットで4文字以上の名前を入力すること。
  2. 部分文字列の抽出: ユーザー名の先頭4文字を取得し、passName に格納すること。
  3. 乱数生成1000 から 9999 までの4桁の乱数を生成し、numPass に格納すること。
  4. 文字列の結合passName と numPass を結合し、pass というパスワードを作成すること。
  5. 出力:
    • ランダムなパスワードが生成されたことを通知するメッセージ。
    • 入力されたユーザー名と生成されたパスワードを出力すること。

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

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

新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:
Hiroki
ランダムなパスワードを作成しました。
ユーザー名:Hiroki
パスワード:Hiro8371

この問題を解くヒント

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

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

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

1:Randomモジュールをインポート
2:main関数の定義
  □ 「新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:」と出力
  □ ユーザーの入力を取得し、変数nameに代入(nullの場合はデフォルト値”nanashi”を設定)
  □ 変数nameの先頭4文字を取得し、変数passNameに代入
  □ 1000〜9999の範囲でランダムな数値を生成し、変数numPassに代入
  □ 変数passNamenumPassを連結し、変数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の文字列テンプレートを使って、passNamenumPassを連結しています。これが最終的なパスワードになります。

例: passName = "Alic"numPass = 1234 の場合、pass = "Alic1234" となります。

結果の出力

println("ランダムなパスワードを作成しました。")
println("ユーザー名:$name")
println("パスワード:$pass")

println: 生成されたパスワードを含む結果をコンソールに出力します。

まとめ

このコードではKotlinの基本的な文字列操作(substring や文字列テンプレート)、ユーザー入力の取得(readLine)、およびランダム数生成(Random.nextInt)について学べます。

シンプルな構造ですが実用的なパスワード生成の方法を示しており、Kotlinの入門者にとって良い学習素材です。

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

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

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

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






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