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

広告

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


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

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

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

今日は Student クラスの中にメソッドを追加しますIsPass() というメソッドを Score フィールドの下に書きます。

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

        public bool IsPass()
        {
            return Score >= 60;
        }
    }

    public static void Run()
    {
        // ここに書く
    }
}
  • IsPass() の中では Score をそのまま使えます(this.Score でも同じです)
  • Run() の中では st.IsPass() のように呼び出します

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

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


🔹 Day27 の振り返り(1分)

  • プロパティ({ get; set; } … public string Name { get; set; } の形。外から見た使い方は public string Name; と同じ
  • よくあったミスConsole.WriteLine(list) では名前は出ない。foreach (Student st in list) { Console.WriteLine(st.Name); } の形で1行ずつ出す
  • 最大・最小のループ対象 … foreach (Student st in list) と書く(students 全体ではなく list を対象にする)

🔹 今日のポイント

インスタンスメソッド … クラスの中に定義し、インスタンス.メソッド名() で呼び出すメソッドです。

Day26〜27 の発展BDay28〜
どこに書くかRun() と同じ階層(staticStudent クラスの中
呼び出し方IsHighScore(st.Score)st.IsPass()
引数int score が必要不要Score を自分で持っている)
  • st.IsPass() の st. … 「この Student(st)の Score を使って判断する」という意味です
  • Unity でも同じ形 … enemy.IsAlive() や player.IsGrounded() のような形でよく使います

進め方(10分の使い方)

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

1限の過ごし方(目安)

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

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

提出ルール(重要)

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

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

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

■ 問題1(基礎)

Student クラス(IsPass() メソッド付き)のインスタンスを 1つ 作り、NameScoreIsPass() の結果 を表示してください。

// 例
Student s = new Student();
s.Name = "田中";
s.Score = 85;
  • s.Names.Scores.IsPass() をそれぞれ Console.WriteLine で表示してください。
  • s.IsPass() の結果は True または False と表示されます。

■ 問題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 },
};

IsPass() が true の Student の Name だけを、foreach を使って1行ずつ表示してください。

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


■ 問題3(集計)

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

ヒント:int count = 0; をループのに置き、if (st.IsPass()) のたびに count++; します。


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

上の students 配列について、IsPass() が true の 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 が動いたら、IsHonor() メソッドを Student クラスに追加しましょう。

  • メソッド名:IsHonor
  • 戻り値:bool
  • 中身:Score >= 80 のとき true を返す

Run 内で IsHonor() が true の Student の Name を1行ずつ表示してください(students 配列全体を対象にします)。

// 発展B の呼び出し例
foreach (Student st in students)
{
    if (st.IsHonor())
    {
        Console.WriteLine(st.Name);
    }
}

⚠️ つまずきやすい点

  • IsPass() の書く場所 … Student クラスのScore プロパティの下)に書きます。Run() の中や外には書きません。
  • 呼び出し方 … if (IsPass()) ではなく if (st.IsPass()) と書きます。st. を付けることで「その Student の Score で判断する」という意味になります。
  • return Score >= 60; … Score >= 60 が true なら true を、false なら false を返します(if を書かなくても1行で書けます)。
  • Name を1行ずつ表示する方法 … Console.WriteLine(list) は List オブジェクトの型名しか出ません。必ず foreach (Student st in list) { Console.WriteLine(st.Name); } の形で書いてください。
  • 最大・最小のループ対象 … foreach (Student st in list) と書きます(students ではなく list が対象です)。

🎯 今日の目的

  • インスタンスメソッド をクラスの中に書き、st.IsPass() の形で呼び出せる
  • 引数なしで Score を参照できる仕組みを体感する
  • 問題2・3・発展で「条件の書き方が変わってもロジックは同じ」と確認する

次へ

次回(Day29)は、別テーマのクラスProduct など)を使って Day26〜28 と同じ形を書く練習をします(転移for / foreach の手書きのまま)。

その次(Day30)で、LINQ(同じ処理を短く書く方法)を扱う予定です。

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

広告

C#

Posted by hidepon