Day28 ウォームアップ(10分)
※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達
今日の準備(ウォームアップの前に)
- Day28.cs を追加する(ソリューションエクスプローラーで、ソリューションの下にある プロジェクト「MiniPractice」を右クリック → 追加 → クラス → 名前を Day28.cs)
- 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 の発展B | Day28〜 | |
|---|---|---|
| どこに書くか | Run() と同じ階層(static) | Student クラスの中 |
| 呼び出し方 | 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つ 作り、Name・Score・IsPass() の結果 を表示してください。
// 例
Student s = new Student();
s.Name = "田中";
s.Score = 85;
s.Name・s.Score・s.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> に追加し、次の順序どおりに表示してください。
- 追加した各 Student の Name を foreach で1行ずつ表示する
- 追加した各 Student の Score の合計を1行で表示する
- 続けて、Score の平均を1行で表示する(整数のままでよいです。
合計 ÷ list.Count) - 続けて、Score の最大を1行で表示する(
listの中だけを対象) - 続けて、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(同じ処理を短く書く方法)を扱う予定です。



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