Day27 ウォームアップ(10分)
※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達
今日の準備(ウォームアップの前に)
- Day27.cs を追加する(ソリューションエクスプローラーで、ソリューションの下にある プロジェクト「MiniPractice」を右クリック → 追加 → クラス → 名前を Day27.cs)
- Program.cs を開き、Main 内の
Day26.Run()をDay27.Run()に書き換える
最初に:今日のクラスの形を確認
今日は class Student の定義だけ変わります。public string Name; がプロパティに変わります。
internal class Day27
{
class Student
{
public string Name { get; set; }
public int Score { get; set; }
}
public static void Run()
{
// ここに書く
}
}
public string Name;(フィールド)→public string Name { get; set; }(プロパティ)に変わりますRun()の中や、new Student { Name = "…", Score = … }の書き方は Day26 と変わりません
🔹 出力について(教材共通)
教材では 簡潔な出力例(個数だけ・該当語のみ・数値のみなど)を載せています。条件・数え方・集約が正しければ、Console.WriteLine に「合計:」などのラベルや、$"…: {値}" のような説明付きで出しても構いません。
🔹 Day26 の振り返り(1分)
new Student()…newでインスタンスを作り、.Name・.Scoreでフィールドにアクセスするforeach (Student st in students)… 型をStudentと書く- よくあったミス:
Console.WriteLine("名前:" + list)と書くと List オブジェクトの型名が出るだけ で名前は表示されません。Name を1行ずつ表示するには 別のforeachが必要です
// ✗ これは名前が表示されない
Console.WriteLine(list);
// ✓ これで Name が1行ずつ出る
foreach (Student st in list)
{
Console.WriteLine(st.Name);
}
🔹 今日のポイント
プロパティ({ get; set; }) とは何か、フィールドと何が違うのかを確認します。
| フィールド(Day26) | プロパティ(Day27〜) | |
|---|---|---|
| 書き方 | public string Name; | public string Name { get; set; } |
| 使い方 | s.Name = "田中"; / s.Name | 変わらない |
| 特徴 | シンプルだがアクセス制御がない | get(読む)/ set(書く)を分けて制御できる |
- 外から見た使い方(
s.Nameの読み書き)は Day26 と変わりません { get; set; }と書くだけで自動的に読み書き両方が有効になります(自動実装プロパティ)- Unity や現場のコードでは
public string Name;よりpublic string Name { get; set; }の方がよく使われます
進め方(10分の使い方)
- 最初の5分:教科書・ノート・これまで自分が書いたコードも見ずに、自分の力だけで書いてみましょう。止まっても構いません。思い出そうとする時間が大事です。
- 後半5分:教科書・ノート・これまで自分が書いたコードを見てOKです。「どこを見ればよいか」「どう直せばよいか」を考えながら、完成に近づけましょう。
1限の過ごし方(目安)
細かい指示は Slack・スライド・口頭 に従ってください(教室のホワイトボードなどに書かれた内容があれば、それも含みます)。
| 時間(目安) | 内容 |
|---|---|
| 0〜15分 | ウォームアップ(準備・今日の課題・提出・動作確認)。課題の進め方は下の**「進め方(10分の使い方)」**のとおりです。 |
| 15〜45分 | 学習時間(これまでの Day 課題(提出コードの見直し・未完成の続き)、教科書の自習・予習など。Slack・スライド・口頭の指示を最優先) |
| 45〜50分 | 振り返りなど(指示に従う) |
- 提出が終わったら(ウォームアップの途中でも可)… Commit/Push と Slack「Day27 完了」は提出ルールに従い、採点を待たず次の学習に進みます。
提出ルール(重要)
- 提出A(最低ライン):問題1だけ動けばOK
- 提出B(標準):問題1・2まで
- 提出C(到達):問題1・2・3(余裕があれば発展)
※今日も「全部できる」より「動く形にそろえる」が目的です。
- 提出方法:GitHub Desktop で Commit → Push してください。1問ごとでも、まとめて1回でもOKです。
- Slack:「Day27 完了しました」と一言送ってください。
■ 問題1(基礎)
Student クラス(プロパティ版)のインスタンスを 1つ 作り、Name と Score を表示してください。
// インスタンスの作り方の例
Student s = new Student();
s.Name = "田中";
s.Score = 85;
s.Nameとs.ScoreをそれぞれConsole.WriteLineで表示してください。- 書き方は Day26 の問題1と同じです。
class Studentの定義が{ get; set; }に変わっただけです。
■ 問題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 },
};
Score が 65 以上 の Student の Name だけを、foreach を使って1行ずつ表示してください。
ヒント:foreach (Student st in students) で回し、if (st.Score >= 65) のときに 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の中だけを対象)
ポイント: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 が動いたら、List に追加する条件(「Score が 70 以上か」)を private static bool メソッド に切り出してコードをきれいにしましょう。
- メソッド名の例:
IsHighScore - 引数:
int score - 戻り値:
bool - 中身:
score >= 70のときtrueを返す
Run 内の foreach では、次のようにします(例)。
if (IsHighScore(st.Score))
{
list.Add(st);
}
⚠️ つまずきやすい点
{ get; set; }の場所 …{ get; set; }はフィールド名の後ろ、セミコロンの前に書きます。public string Name { get; set; }の形です。- 使い方は変わらない …
s.Name = "田中";やst.Nameの書き方は Day26 と同じです。プロパティに変えてもエラーにはなりません。 new Student { Name = "…", Score = … }も変わらない … オブジェクト初期化子の書き方はそのまま使えます。- Name を1行ずつ表示する方法 …
Console.WriteLine(list)は List オブジェクトの型名しか出ません。必ずforeach (Student st in list) { Console.WriteLine(st.Name); }の形で書いてください。 - 最大・最小のループ対象 …
foreach (Student st in list)と書きます(studentsではなくlistが対象です)。
🎯 今日の目的
- プロパティ(
{ get; set; }) の書き方を知り、フィールドとの違いを理解する - 外から見た使い方は変わらないことを体で確認する
listを対象にしたforeachで Name を1行ずつ表示できる- Day26 の形(
new・フィールドアクセス・集計)を改めて定着させる
次へ
次回(Day28)は、クラスにメソッドを持たせる練習をします(IsPass() などの判定メソッドを Student クラスの中に書きます)。



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