C# | 2週間で身につくアプリを作りながら学ぶC#の基本 - 7日目

C# C#
スポンサーリンク

7日目のゴールとテーマ

7日目のテーマは「ここまでの全部を使って、1つの“ちゃんとしたミニアプリ”を完成させる」です。
1〜6日目で学んだのは、入力、出力、if、for、配列、メソッド。
今日はそれらをバラバラに練習するのではなく、「1本のアプリ」としてつなげます。

ここでは例として、
「質問に答えていくと結果が出る“性格診断アプリ(コンソール版)”」
を一緒に作ります。

もちろん、クイズアプリでも点数アプリでも応用できます。
大事なのは「設計 → 実装 → 動作確認」の流れを、自分の頭で追えることです。


アプリの設計を言葉で決める

性格診断アプリの仕様を日本語で書く

いきなりコードに行かず、まずは日本語で仕様を書きます。

質問をいくつか用意する
各質問には「はい」「いいえ」で答える
「はい」の数によって診断結果を変える
最後に診断メッセージを表示する

これをもう少し具体的にします。

質問は 5 問にする
ユーザーには「y / n」で答えてもらう
「はい(y)」の数が
0〜1 個 → 超インドアタイプ
2〜3 個 → バランスタイプ
4〜5 個 → 超アクティブタイプ

ここまで決まれば、あとはそれを C# に翻訳していくだけです。

必要な要素を分解する

このアプリに必要な要素を整理すると、こうなります。

質問文をまとめて持つ → 文字列の配列
質問を順番に出す → for 文
ユーザーの回答を受け取る → Console.ReadLine
「はい」の数を数える → 変数+if
最後に結果を表示する → if で分岐

さらに、コードをきれいにするために、

「1問出して、はいかどうかを返す」メソッド
「結果を表示する」メソッド

も用意すると、かなり見通しの良い構成になります。


質問を配列で用意する

Program.cs の骨組み

まずは Program.cs に、Main と質問の配列を書きます。

using System;

class Program
{
    static void Main(string[] args)
    {
        string[] questions =
        {
            "休日は家で過ごすことが多いですか?",
            "一人でいる時間が好きですか?",
            "初対面の人と話すのは少し緊張しますか?",
            "新しい場所に行くより、行き慣れた場所が好きですか?",
            "大人数の飲み会より、少人数で話す方が好きですか?"
        };

        // ここに診断ロジックを書いていく
    }
}
C#

ここで大事なのは、
「質問を string[] でまとめて持つ」という構造です。

questions[0] から questions[4] まで、5 問分が入っています。
Length を使えば、何問あるかも簡単に分かります。


1問分の処理をメソッドにする

「質問を表示して、はいなら true を返す」メソッド

質問を出して、ユーザーに y/n で答えてもらい、
「はいなら true、いいえなら false」を返すメソッドを作ります。

static bool AskYesNo(string question)
{
    while (true)
    {
        Console.WriteLine(question);
        Console.WriteLine("はいなら y、いいえなら n を入力して Enter を押してください:");
        string input = Console.ReadLine();

        if (input == null)
        {
            continue;
        }

        string answer = input.Trim().ToLower();

        if (answer == "y")
        {
            Console.WriteLine("→ はい");
            Console.WriteLine();
            return true;
        }
        else if (answer == "n")
        {
            Console.WriteLine("→ いいえ");
            Console.WriteLine();
            return false;
        }
        else
        {
            Console.WriteLine("y か n で答えてください。");
            Console.WriteLine();
        }
    }
}
C#

ここは少し長いですが、超重要なので丁寧に分解します。

while(true) の意味

while (true) は「永遠ループ」です。
ただし、中で return しているので、実際には正しい入力が来たら抜けます。

「正しい入力が来るまで聞き続ける」というときに、
このパターンはよく使われます。

Trim と ToLower

input.Trim() は、前後の空白や改行を取り除きます。
ToLower() は、小文字に変換します。

これで、

” Y”
“y “
“Y\n”

のような入力も、全部 "y" として扱えるようになります。

true / false を返す

return true;return false; が、このメソッドの「結果」です。

呼び出し側は、「はいなら true、いいえなら false」という
分かりやすい形で受け取れます。


「はい」の数をカウントするメインロジック

Main に診断の流れを書く

Main に戻って、質問を順番に聞いていきます。

static void Main(string[] args)
{
    string[] questions =
    {
        "休日は家で過ごすことが多いですか?",
        "一人でいる時間が好きですか?",
        "初対面の人と話すのは少し緊張しますか?",
        "新しい場所に行くより、行き慣れた場所が好きですか?",
        "大人数の飲み会より、少人数で話す方が好きですか?"
    };

    Console.WriteLine("=== 性格診断アプリ(インドア度チェック) ===");
    Console.WriteLine("質問に y / n で答えてください。");
    Console.WriteLine();

    int yesCount = 0;

    for (int i = 0; i < questions.Length; i++)
    {
        Console.WriteLine("第 " + (i + 1) + " 問");
        bool yes = AskYesNo(questions[i]);

        if (yes)
        {
            yesCount = yesCount + 1;
        }
    }

    ShowResult(yesCount, questions.Length);
}
C#

ここでの重要ポイントを整理します。

診断の前にタイトルと説明を表示している
yesCount を 0 でスタートして、「はい」のたびに 1 足している
AskYesNo の戻り値(true/false)を受け取って if で分岐している
最後に ShowResult に「はいの数」と「質問数」を渡している

「Main は全体の流れだけを書く」という形になってきました。
細かい処理はメソッドに任せる、という6日目の考え方がそのまま生きています。


診断結果を表示するメソッド

yesCount に応じてメッセージを変える

最後に、結果表示用のメソッドを書きます。

static void ShowResult(int yesCount, int total)
{
    Console.WriteLine();
    Console.WriteLine("=== 診断結果 ===");
    Console.WriteLine("「はい」と答えた数: " + yesCount + " / " + total);

    if (yesCount <= 1)
    {
        Console.WriteLine("あなたは超アクティブタイプです。");
        Console.WriteLine("外に出て新しいことをするのが好きなはず。");
    }
    else if (yesCount <= 3)
    {
        Console.WriteLine("あなたはバランスタイプです。");
        Console.WriteLine("家で過ごす時間も、外で過ごす時間も、どちらも楽しめるタイプです。");
    }
    else
    {
        Console.WriteLine("あなたはかなりインドアタイプです。");
        Console.WriteLine("家での時間を大事にしつつ、ときどき外の世界も覗いてみると新しい発見があるかも。");
    }

    Console.WriteLine();
    Console.WriteLine("診断は以上です。ありがとうございました。");
}
C#

ここで深掘りしたいのは「条件の設計」です。

yesCount <= 1
「0 か 1 ならここ」

else if (yesCount <= 3)
「ここに来る時点で yesCount は 2 か 3」

else
「それ以外(4 か 5)」

このように、「上から順番に条件を狭めていく」イメージで書くと、
if 〜 else if 〜 else が整理しやすくなります。


7日目の完成コード(全体像)

ここまでのコードを一つにまとめる

最終的な Program.cs は、こんな構成になります。

using System;

class Program
{
    static void Main(string[] args)
    {
        string[] questions =
        {
            "休日は家で過ごすことが多いですか?",
            "一人でいる時間が好きですか?",
            "初対面の人と話すのは少し緊張しますか?",
            "新しい場所に行くより、行き慣れた場所が好きですか?",
            "大人数の飲み会より、少人数で話す方が好きですか?"
        };

        Console.WriteLine("=== 性格診断アプリ(インドア度チェック) ===");
        Console.WriteLine("質問に y / n で答えてください。");
        Console.WriteLine();

        int yesCount = 0;

        for (int i = 0; i < questions.Length; i++)
        {
            Console.WriteLine("第 " + (i + 1) + " 問");
            bool yes = AskYesNo(questions[i]);

            if (yes)
            {
                yesCount = yesCount + 1;
            }
        }

        ShowResult(yesCount, questions.Length);
    }

    static bool AskYesNo(string question)
    {
        while (true)
        {
            Console.WriteLine(question);
            Console.WriteLine("はいなら y、いいえなら n を入力して Enter を押してください:");
            string input = Console.ReadLine();

            if (input == null)
            {
                continue;
            }

            string answer = input.Trim().ToLower();

            if (answer == "y")
            {
                Console.WriteLine("→ はい");
                Console.WriteLine();
                return true;
            }
            else if (answer == "n")
            {
                Console.WriteLine("→ いいえ");
                Console.WriteLine();
                return false;
            }
            else
            {
                Console.WriteLine("y か n で答えてください。");
                Console.WriteLine();
            }
        }
    }

    static void ShowResult(int yesCount, int total)
    {
        Console.WriteLine();
        Console.WriteLine("=== 診断結果 ===");
        Console.WriteLine("「はい」と答えた数: " + yesCount + " / " + total);

        if (yesCount <= 1)
        {
            Console.WriteLine("あなたは超アクティブタイプです。");
            Console.WriteLine("外に出て新しいことをするのが好きなはず。");
        }
        else if (yesCount <= 3)
        {
            Console.WriteLine("あなたはバランスタイプです。");
            Console.WriteLine("家で過ごす時間も、外で過ごす時間も、どちらも楽しめるタイプです。");
        }
        else
        {
            Console.WriteLine("あなたはかなりインドアタイプです。");
            Console.WriteLine("家での時間を大事にしつつ、ときどき外の世界も覗いてみると新しい発見があるかも。");
        }

        Console.WriteLine();
        Console.WriteLine("診断は以上です。ありがとうございました。");
    }
}
C#

ここまで動かせたら、1〜7日目で学んだ要素が
ちゃんと「1つのアプリ」としてつながっている状態です。


7日目のまとめと、次の1週間へのつなぎ

この1週間で身についたこと

コンソールに表示する(Console.WriteLine)
入力を受け取る(Console.ReadLine)
条件分岐(if / else / else if)
繰り返し(for / while)
配列(int[] / string[])
メソッド(引数・戻り値・役割分担)

これらを組み合わせて、
診断アプリ・クイズアプリ・点数集計アプリなどが作れるようになりました。

「C# の基本文法を、アプリを作りながら一通り触った」状態です。

次の1週間でできること

後半の 8〜14 日目では、例えばこんな方向に進めます。

ファイル保存を使った「簡易メモ帳」
クラスを使った「オブジェクト指向入門」
もう少し本格的な「コンソールゲーム風アプリ」

タイトルとURLをコピーしました