Day27 ウォームアップ(10分)

広告

※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達


今日の準備(ウォームアップの前に)

  1. Day27.cs を追加する(ソリューションエクスプローラーで、ソリューションの下にある プロジェクト「MiniPractice」を右クリック → 追加 → クラス → 名前を Day27.cs
  2. Program.cs を開き、Main 内の Day26.Run() を Day27.Run() に書き換える

最初に:今日のクラスの形を確認

今日は class Student の定義だけ変わりますpublic string Name; がプロパティに変わります。

internal class Day27
{
    class Student
    {
        public string Name { get; set; }
        public int Score { get; set; }
    }

    public static void Run()
    {
        // ここに書く
    }
}
  • public string Name;(フィールド)→ public string Name { get; set; }(プロパティ)に変わります
  • Run() の中や、new Student { Name = "…", Score = … } の書き方は Day26 と変わりません

🔹 出力について(教材共通)

教材では 簡潔な出力例(個数だけ・該当語のみ・数値のみなど)を載せています。条件・数え方・集約が正しければConsole.WriteLine に「合計:」などのラベルや、$"…: {値}" のような説明付きで出しても構いません。


🔹 Day26 の振り返り(1分)

  • new Student() … new でインスタンスを作り、.Name.Score でフィールドにアクセスする
  • foreach (Student st in students) … 型を Student と書く
  • よくあったミスConsole.WriteLine("名前:" + list) と書くと List オブジェクトの型名が出るだけ で名前は表示されません。Name を1行ずつ表示するには 別の foreach が必要です
// ✗ これは名前が表示されない
Console.WriteLine(list);

// ✓ これで Name が1行ずつ出る
foreach (Student st in list)
{
    Console.WriteLine(st.Name);
}

🔹 今日のポイント

プロパティ({ get; set; } とは何か、フィールドと何が違うのかを確認します。

フィールド(Day26)プロパティ(Day27〜)
書き方public string Name;public string Name { get; set; }
使い方s.Name = "田中"; / s.Name変わらない
特徴シンプルだがアクセス制御がないget(読む)/ set(書く)を分けて制御できる
  • 外から見た使い方(s.Name の読み書き)は Day26 と変わりません
  • { get; set; } と書くだけで自動的に読み書き両方が有効になります(自動実装プロパティ
  • Unity や現場のコードでは public string Name; より public string Name { get; set; } の方がよく使われます

進め方(10分の使い方)

  • 最初の5分:教科書・ノート・これまで自分が書いたコードも見ずに、自分の力だけで書いてみましょう。止まっても構いません。思い出そうとする時間が大事です。
  • 後半5分:教科書・ノート・これまで自分が書いたコードを見てOKです。「どこを見ればよいか」「どう直せばよいか」を考えながら、完成に近づけましょう。

1限の過ごし方(目安)

細かい指示は Slack・スライド・口頭 に従ってください(教室のホワイトボードなどに書かれた内容があれば、それも含みます)。

時間(目安)内容
0〜15分ウォームアップ(準備・今日の課題・提出・動作確認)。課題の進め方は下の**「進め方(10分の使い方)」**のとおりです。
15〜45分学習時間これまでの Day 課題(提出コードの見直し・未完成の続き)、教科書の自習・予習など。Slack・スライド・口頭の指示を最優先)
45〜50分振り返りなど(指示に従う)
  • 提出が終わったら(ウォームアップの途中でも可)… Commit/Push と Slack「Day27 完了」は提出ルールに従い、採点を待たず次の学習に進みます。

提出ルール(重要)

  • 提出A(最低ライン):問題1だけ動けばOK
  • 提出B(標準):問題1・2まで
  • 提出C(到達):問題1・2・3(余裕があれば発展)

※今日も「全部できる」より「動く形にそろえる」が目的です。

  • 提出方法:GitHub Desktop で Commit → Push してください。1問ごとでも、まとめて1回でもOKです。
  • Slack:「Day27 完了しました」と一言送ってください。

■ 問題1(基礎)

Student クラス(プロパティ版)のインスタンスを 1つ 作り、Name と Score を表示してください。

// インスタンスの作り方の例
Student s = new Student();
s.Name = "田中";
s.Score = 85;
  • s.Name と s.Score をそれぞれ Console.WriteLine で表示してください。
  • 書き方は Day26 の問題1と同じです。class Student の定義が { get; set; } に変わっただけです。

■ 問題2(条件)

次の配列があります。

Student[] students =
{
    new Student { Name = "山田", Score = 62 },
    new Student { Name = "田中", Score = 85 },
    new Student { Name = "鈴木", Score = 73 },
    new Student { Name = "佐藤", Score = 50 },
    new Student { Name = "高橋", Score = 94 },
    new Student { Name = "伊藤", Score = 67 },
};

Score が 65 以上 の Student の Name だけを、foreach を使って1行ずつ表示してください。

ヒント:foreach (Student st in students) で回し、if (st.Score >= 65) のときに Console.WriteLine(st.Name); します。


■ 問題3(集計)

上の students 配列について、Score が 70 以上 の Student が 何人いるかを数え、個数だけを1行で表示してください。

ヒント:int count = 0; をループのに置き、条件に合うたびに count++; します。ループのに Console.WriteLine(count);を1回書きます。
条件:if (st.Score >= 70)


■ 発展A(余裕がある人)

上の students 配列について、Score が 70 以上 の Student を List<Student> に追加し、次の順序どおりに表示してください。

  1. 追加した各 Student の Name を foreach で1行ずつ表示する
  2. 追加した各 Student の Score の合計1行で表示する
  3. 続けて、Score の平均1行で表示する(整数のままでよいです。合計 ÷ list.Count
  4. 続けて、Score の最大1行で表示する(list の中だけを対象)
  5. 続けて、Score の最小1行で表示する(list の中だけを対象)

ポイント:Name を1行ずつ表示するには、list を対象にした 別の foreach が必要です(Console.WriteLine(list) だけでは名前は出ません)。

最大の求め方(例) … int max = int.MinValue; を用意し、foreach (Student st in list) で if (st.Score > max) { max = st.Score; } のように更新します。
最小の求め方(例) … int min = int.MaxValue; を用意し、foreach (Student st in list) で if (st.Score < min) { min = st.Score; } のように更新します。


■ 発展B(発展Aが動いたらチャレンジ)

発展A が動いたら、List に追加する条件(「Score が 70 以上か」)を private static bool メソッド に切り出してコードをきれいにしましょう。

  • メソッド名の例:IsHighScore
  • 引数:int score
  • 戻り値:bool
  • 中身:score >= 70 のとき true を返す

Run 内の foreach では、次のようにします(例)。

if (IsHighScore(st.Score))
{
    list.Add(st);
}

⚠️ つまずきやすい点

  • { get; set; } の場所 … { get; set; } はフィールド名の後ろ、セミコロンのに書きます。public string Name { get; set; }の形です。
  • 使い方は変わらない … s.Name = "田中"; や st.Name の書き方は Day26 と同じです。プロパティに変えてもエラーにはなりません。
  • new Student { Name = "…", Score = … } も変わらない … オブジェクト初期化子の書き方はそのまま使えます。
  • Name を1行ずつ表示する方法 … Console.WriteLine(list) は List オブジェクトの型名しか出ません。必ず foreach (Student st in list) { Console.WriteLine(st.Name); } の形で書いてください。
  • 最大・最小のループ対象 … foreach (Student st in list) と書きます(students ではなく list が対象です)。

🎯 今日の目的

  • プロパティ({ get; set; } の書き方を知り、フィールドとの違いを理解する
  • 外から見た使い方は変わらないことを体で確認する
  • list を対象にした foreach で Name を1行ずつ表示できる
  • Day26 の形(new・フィールドアクセス・集計)を改めて定着させる

次へ

次回(Day28)は、クラスにメソッドを持たせる練習をします(IsPass() などの判定メソッドを Student クラスの中に書きます)。

訪問数 17 回, 今日の訪問数 17回

広告