Day29 ウォームアップ(10分)
※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達
今日の準備(ウォームアップの前に)
- Day29.cs を追加する(ソリューションエクスプローラーで、ソリューションの下にある プロジェクト「MiniPractice」を右クリック → 追加 → クラス → 名前を Day29.cs)
- 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〜28 | Day29 | |
|---|---|---|
| クラス名 | Student | Product |
| フィールド | Name, Score | Name, Price |
| メソッド | IsPass() | IsDiscount() |
| 条件 | Score >= 60 | Price >= 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つ 作り、Name・Price・IsDiscount() の結果 を表示してください。
// 例
Product p = new Product();
p.Name = "ノート";
p.Price = 200;
p.Name・p.Price・p.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> に追加し、次の順序どおりに表示してください。
- 追加した各 Product の Name を foreach で1行ずつ表示する
- 追加した各 Product の Price の合計を1行で表示する
- 続けて、Price の平均を1行で表示する(整数のままでよいです。
合計 ÷ list.Count) - 続けて、Price の最大を1行で表示する(
listの中だけを対象) - 続けて、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 クラス・同じ配列を使って LINQ(Where / Select / Sum など)を試します。「同じ処理を短く書く方法」として比べてみましょう。



ディスカッション
コメント一覧
まだ、コメントがありません