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

広告

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


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

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

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

今日は Product(商品)クラス を使います。IsDiscount() というメソッドを Price フィールドの下に書きます。

internal class Day29
{
    class Product
    {
        public string Name { get; set; }
        public int Price { get; set; }

        public bool IsDiscount()
        {
            return Price >= 1000;
        }
    }

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

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

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


🔹 Day28 の振り返り(1分)

  • インスタンスメソッド … Student クラスの中に書いた IsPass()st.IsPass() の形で呼び出す
  • 引数が不要 … クラスが Score を自分で持っているから、外から渡す必要がない
  • 今日のポイント:クラス名・フィールド名・メソッド名が変わっても、書き方の構造は同じです

🔹 今日のポイント(転移)

同じ構造を別テーマで書く練習です。

Day26〜28Day29
クラス名StudentProduct
フィールドNameScoreNamePrice
メソッドIsPass()IsDiscount()
条件Score >= 60Price >= 1000
  • 書き方の骨格は Day28 と全く同じです。クラス名とフィールド名を読み替えるだけで書けます
  • 「同じ形が別の場面でも使える」という感覚を確認するのが今日の目的です

進め方(10分の使い方)

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

1限の過ごし方(目安)

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

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

提出ルール(重要)

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

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

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

■ 問題1(基礎)

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

// 例
Product p = new Product();
p.Name = "ノート";
p.Price = 200;
  • p.Namep.Pricep.IsDiscount() をそれぞれ Console.WriteLine で表示してください。
  • p.IsDiscount() の結果は True または False と表示されます。

■ 問題2(条件)

次の配列があります。

Product[] products =
{
    new Product { Name = "ノート",         Price =  200 },
    new Product { Name = "ボールペン",     Price =  150 },
    new Product { Name = "ファイル",       Price =  300 },
    new Product { Name = "バインダー",     Price = 1200 },
    new Product { Name = "ラベルシール",   Price =  800 },
    new Product { Name = "ホワイトボード", Price = 3500 },
    new Product { Name = "クリアケース",   Price = 1500 },
};

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

ヒント:foreach (Product pr in products) で回し、if (pr.IsDiscount()) のときに Console.WriteLine(pr.Name); します。


■ 問題3(集計)

上の products 配列について、IsDiscount() が true の Product が 何個あるかを数え、個数だけを1行で表示してください。

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


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

上の products 配列について、IsDiscount() が true の Product を List<Product> に追加し、次の順序どおりに表示してください。

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

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

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


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

発展A が動いたら、IsPremium() メソッドを Product クラスに追加しましょう。

  • メソッド名:IsPremium
  • 戻り値:bool
  • 中身:Price >= 2000 のとき true を返す

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

// 発展B の呼び出し例
foreach (Product pr in products)
{
    if (pr.IsPremium())
    {
        Console.WriteLine(pr.Name);
    }
}

⚠️ つまずきやすい点

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

🎯 今日の目的

  • クラス名・フィールド名が変わっても同じ構造で書ける感覚をつかむ(転移)
  • Product クラスに IsDiscount() メソッドを書き、pr.IsDiscount() の形で呼び出せる
  • 問題2・3・発展で「Day28 と同じ骨格が別テーマでも使える」と確認する

次へ

次回(Day30)は、Day29 と同じ Product クラス・同じ配列を使って LINQWhere / Select / Sum など)を試します。「同じ処理を短く書く方法」として比べてみましょう。

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

広告