Day26 ウォームアップ(10分)
※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達
今日の準備(ウォームアップの前に)
- Day26.cs を追加する(ソリューションエクスプローラーで、ソリューションの下にある プロジェクト「MiniPractice」を右クリック → 追加 → クラス → 名前を Day26.cs)
- Program.cs を開き、Main 内の
Day25.Run()をDay26.Run()に書き換える
最初に:コードの形を確認
今日から クラス宣言の形が変わります。次の形になっているか確認しましょう。
internal class Day26
{
class Student
{
public string Name;
public int Score;
}
public static void Run()
{
// ここに書く
}
}
static classからinternal classに変わります(今日から毎回この形)- 問題で使うクラス(
Studentなど)はDay26の中に nested(入れ子) で定義します Run()は引き続きpublic staticのままです- 問題1〜3 の処理は必ず
Run()の{ }の中 に書きます - 発展B では
Runの外にprivate staticメソッドを1つ 書いてもよいです
なぜ static class から internal class に変わるの?
Day1〜25 の static class は「フィールドやメソッドをまとめる入れ物」として最小限の形でした。internal class(static なし)はインスタンスを作れる通常のクラスです。今日から new Student() でインスタンスを生み出す練習をするので、インスタンスを作れる形に切り替えます。Unity の MonoBehaviourや現場で書くクラスも基本的にこちらの形です。
なぜ Student を Day26 の中(nested)に書くの?Student は今日のウォームアップ専用のクラスです。Day26 の外に書くとプロジェクト全体から見えてしまい、他の日のコードと名前が衝突しやすくなります。nested にすることで「Day26 の中だけで使う」ことを明示できます。Unity のプロジェクトでも、小さな補助クラスを同じファイル内に限定して書く場面はよくあります。
🔹 今日のルール
今日は クラスとインスタンス を初めて使います。
- 問題1〜3 …
Runメソッドの中だけで書きます - 発展A …
List<Student>への追加と集約(Runの中で書きます) - 発展B … 条件判定を
private static boolメソッド1つ にまとめます(Runの下に書きます) - 今は「new・フィールド・foreach の組み合わせを体で覚える」時間です。「なぜ
newが必要?」「なぜst.Scoreと書くの?」という疑問は積極的に声に出してください
🔹 出力について(教材共通)
教材では 簡潔な出力例(個数だけ・該当語のみ・数値のみなど)を載せています。条件・数え方・集約が正しければ、Console.WriteLine に「合計:」などのラベルや、$"…: {値}" のような説明付きで出しても構いません。
🔹 Day25 の振り返り(1分)
EndsWith("e")… 文字列が"e"で終わるか。Contains/StartsWith/EndsWithの3セット。&&と||… 「かつ」は&&、「または」は||。private static boolメソッド … 条件を1か所にまとめ、Runから呼び出す形。
🔹 今日のポイント
今日から OOP(クラス・インスタンス) フェーズに入ります。
- クラスを定義する …
class Studentの中に フィールド(public string Name;/public int Score;)を書きます。 - インスタンスを作る(
new) …Student s = new Student();でインスタンスを1つ作ります。 - フィールドに値を入れる …
s.Name = "田中";のように変数名.フィールド名 = 値;で代入します。 - フィールドを読む …
Console.WriteLine(s.Name);のように変数名.フィールド名で参照します。 - 配列に並べる …
Student[] students = { new Student { Name = "山田", Score = 55 }, ... };のように オブジェクト初期化子でまとめて書けます(問題2・3で使います)。
進め方(10分の使い方)
- 最初の5分:教科書・ノート・これまで自分が書いたコードも見ずに、自分の力だけで書いてみましょう。止まっても構いません。思い出そうとする時間が大事です。
- 後半5分:教科書・ノート・これまで自分が書いたコードを見てOKです。「どこを見ればよいか」「どう直せばよいか」を考えながら、完成に近づけましょう。
1限の過ごし方(目安)
細かい指示は Slack・スライド・口頭 に従ってください(教室のホワイトボードなどに書かれた内容があれば、それも含みます)。
| 時間(目安) | 内容 |
|---|---|
| 0〜15分 | ウォームアップ(準備・今日の課題・提出・動作確認)。課題の進め方は下の**「進め方(10分の使い方)」**のとおりです。 |
| 15〜45分 | 学習時間(これまでの Day 課題(提出コードの見直し・未完成の続き)、教科書の自習・予習など。Slack・スライド・口頭の指示を最優先) |
| 45〜50分 | 振り返りなど(指示に従う) |
- 提出が終わったら(ウォームアップの途中でも可)… Commit/Push と Slack「Day26 完了」は提出ルールに従い、採点を待たず次の学習に進みます。
提出ルール(重要)
- 提出A(最低ライン):問題1だけ動けばOK
- 提出B(標準):問題1・2まで
- 提出C(到達):問題1・2・3(余裕があれば発展)
※今日も「全部できる」より「動く形にそろえる」が目的です。
- 提出方法:GitHub Desktop で Commit → Push してください。1問ごとでも、まとめて1回でもOKです。
- Slack:「Day26 完了しました」と一言送ってください。
■ 問題1(基礎)
Student クラスのインスタンスを 1つ 作り、Name と Score を表示してください。
// インスタンスの作り方の例
Student s = new Student();
s.Name = "田中";
s.Score = 85;
s.Nameとs.ScoreをそれぞれConsole.WriteLineで表示してください。
メモ:問題2の配列では new Student { Name = "山田", Score = 55 } という オブジェクト初期化子 の書き方を使っています。これは「new して、フィールドをまとめて代入する」短縮形です。問題1の2行と意味は同じです。
■ 問題2(条件)
次の配列があります。
Student[] students =
{
new Student { Name = "山田", Score = 55 },
new Student { Name = "田中", Score = 82 },
new Student { Name = "鈴木", Score = 70 },
new Student { Name = "佐藤", Score = 45 },
new Student { Name = "高橋", Score = 91 },
new Student { Name = "伊藤", Score = 63 },
};
Score が 60 以上 の Student の Name だけを、foreach を使って1行ずつ表示してください。
ヒント:foreach (Student st in students) で回し、if (st.Score >= 60) のときに 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> に追加し、次の順序どおりに表示してください。
- 追加した各 Student の Name を foreach で1行ずつ表示する
- 追加した各 Student の Score の合計を1行で表示する
- 続けて、Score の平均を1行で表示する(整数のままでよいです。
合計 ÷ list.Count) - 続けて、Score の最大を1行で表示する(
listの中だけを対象) - 続けて、Score の最小を1行で表示する(
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);
}
⚠️ つまずきやすい点
internal classとclass Studentの位置 …class Studentはinternal class Day26の中に書きます(Runの中ではありません)。new Student()…newを忘れるとコンパイルエラーになります。- フィールドへのアクセス …
s.Nameのように変数名.フィールド名の形で書きます。Nameだけでは参照できません。 foreachの型 …foreach (Student st in students)と書きます。intやstringではありません。st.Score…stはループ変数名(自分で決めてよいです)。students.Scoreとは書けません。countの表示 … ループの後にConsole.WriteLine(count);を必ず1回。- 発展Bのメソッド …
Runの閉じ括弧の下に書きます(Runの中にネストしない)。
🎯 今日の目的
internal class+ nested クラス の形を書けるnewでインスタンスを作り、フィールドに値を代入・参照できるforeach (Student st in students)でクラスの配列を回せるst.フィールド名でフィールドにアクセスできる- 条件に合う要素を
ifでフィルタして表示・集計できる
次へ
次回(Day27)は、プロパティ(get; set;) を使って Student クラスを書き直します。



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