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 日目では、例えばこんな方向に進めます。
ファイル保存を使った「簡易メモ帳」
クラスを使った「オブジェクト指向入門」
もう少し本格的な「コンソールゲーム風アプリ」
