Day25 ウォームアップ(10分)
※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※今日のゴール目安:提出A(問題1が動く)で合格、提出B(1・2)で標準到達、提出C+発展で上位到達
今日の準備(ウォームアップの前に)
- Day25.cs を追加する(ソリューションエクスプローラーで、ソリューションの下にある プロジェクト「MiniPractice」を右クリック → 追加 → クラス → 名前を Day25.cs)
- Program.cs を開き、Main 内の
Day24.Run()をDay25.Run()に書き換える
最初に:コードの形を確認
次の形になっているか確認しましょう。
internal class Day25
{
public static void Run()
{
// ここに書く
}
}
- 問題1〜3 の処理は必ず Run() の { } の中 に書きます
- 発展 では、後述のとおり
Runの外に メソッドを1つ 書いてもよいです(次のステップ)
🔹 今日のルール
今日は Day25.cs を追加します。Day25.cs はソリューション内の 25番目のファイル(クラス) になります。
- 問題1〜3 …
Runメソッドの中だけで書きます(Run以外のメソッドは作りません) - 発展 … 条件判定を
private staticメソッド1つ にまとめます(Runの下に書きます)。メソッド名の例は問題文にあります - 発展以外に メソッドを増やさない(分割しすぎない)ようにします
- 今は「同じ形を体に染み込ませる」時間です。「なぜこの書き方?」という疑問が出たら、それは良いサインです。手を止めて講師に聞いてください
🔹 出力について(教材共通)
教材では 簡潔な出力例(個数だけ・該当語のみ・数値のみなど)を載せています。条件・数え方・集約が正しければ、Console.WriteLine に「合計:」などのラベルや、$"…: {値}" のような説明付きで出しても構いません。見やすさのための補助テキストは、このウォームアップのどの日の問題も減点しません。
🔹 Day24 の振り返り(1分)
StartsWith("...")… 文字列の先頭が引数と一致するか。s.StartsWith("t")は先頭が"t"かどうか。Contains("...")… 文字列に引数が1文字でも含まれるか。&&で条件を連結 … 「長さ範囲 かつContainsかつStartsWith」は&&でつなぐ。||(または) … 問題3の「または」は||。>=(以上) と<=(以下) を取り違えない。private static boolメソッド … 条件を1か所にまとめ、Runからif (メソッド名(scores[i]))で呼ぶ形。
🔹 今日のポイント
今日は Day24 と同じ型を、別データ・別の閾値・新しい文字列メソッドで書きます。新しく足すのは問題2だけです。
- 文字列が
"e"で終わる(問題2) …EndsWith("e")を使います。末尾が引数の文字列と一致するかどうかを調べます(小文字のeです。問題文のwordsはすべて小文字です)。
これで文字列の3つのメソッドがそろいます。
| メソッド | 意味 |
|---|---|
Contains("i") | 文字列に "i" が含まれるか |
StartsWith("t") | 文字列が "t" で始まるか |
EndsWith("e") | 文字列が "e" で終わるか |
Day24 で学んだ次のものも、そのまま使います。
- 文字列(問題2) … 文字の長さの範囲に
&&でContainsを足し、さらに&&でEndsWithを足します。 boolを返す小さなメソッド(発展) … 条件をprivate static boolにまとめ、Runからif (...)で呼び出す。- List の集約(発展) … 合計・平均・最大・最小を、
listだけを対象にする。
メソッドの形 … Run の外に private static bool メソッド名(引数) を 1つ 書きます。Run の中から if (メソッド名(scores[i])) のように呼び出します。
private… このクラス(Day25)の中だけで使う、という意味です(今は暗記でOKです)static…Runと同じく、インスタンスを作らずに呼べる形にそろえます
進め方(10分の使い方)
- 最初の5分:教科書・ノート・これまで自分が書いたコードも見ずに、自分の力だけで書いてみましょう。止まっても構いません。思い出そうとする時間が大事です。
- 後半5分:教科書・ノート・これまで自分が書いたコードを見てOKです。「どこを見ればよいか」「どう直せばよいか」を考えながら、完成に近づけましょう。
1限の過ごし方(目安)
細かい指示は Slack・スライド・口頭 に従ってください(教室のホワイトボードなどに書かれた内容があれば、それも含みます)。
| 時間(目安) | 内容 |
|---|---|
| 0〜15分 | ウォームアップ(準備・今日の課題・提出・動作確認)。課題の進め方は下の**「進め方(10分の使い方)」**のとおりです。 |
| 15〜45分 | 学習時間(これまでの Day 課題(提出コードの見直し・未完成の続き)、教科書の自習・予習など。Slack・スライド・口頭の指示を最優先) |
| 45〜50分 | 振り返りなど(指示に従う) |
- 提出が終わったら(ウォームアップの途中でも可)… Commit/Push と Slack「Day25 完了」は提出ルールに従い、採点を待たず次の学習に進みます。結果の連絡はあとからあります。
- 今日の課題は Day24 と同じ型で、数値とデータだけ違います(問題2だけ
EndsWithが増えます)。型に慣れる練習だと考えてください。
提出ルール(重要)
- 提出A(最低ライン):問題1だけ動けばOK
- 提出B(標準):問題1・2まで
- 提出C(到達):問題1・2・3(余裕があれば発展)
※今日も「全部できる」より「動く形にそろえる」が目的です。
- 提出方法:GitHub Desktop で Commit → Push してください。1問ごとでも、まとめて1回でもOKです。
- Slack:「Day25 完了しました」と一言送ってください。
■ 問題1(基礎)
次の配列があります。
int[] nums = { 3, 6, 9, 12, 15, 18 };
この配列の要素を、foreach を使って1つずつ表示してください。
■ 問題2(文字列+範囲+&&+Contains+EndsWith)
次の配列があります(すべて小文字です)。
string[] words = { "code", "slide", "drive", "game", "phone", "image", "node", "grape", "frame", "bridge" };
次のすべてを満たすものだけを表示してください。
- 文字数が 4以上 かつ 6以下 である
- かつ、文字列に 小文字の
iが1文字でも含まれる(Containsを使います) - かつ、文字列が
"e"で終わる(EndsWithを使います)
ヒント:「以上」かつ「以下」 は && でつなぎます。さらに && s.Contains("i") と && s.EndsWith("e") のように、含むかどうかと末尾が一致するかを足します。
例:if (s.Length >= 4 && s.Length <= 6 && s.Contains("i") && s.EndsWith("e"))EndsWith は、引数の文字列が末尾と一致するかどうかを調べます。foreach の変数名は s でも word でも構いません。
※この配列の個数は 問題3の scores と同じとは限りません。問題3では scores.Length を使います。
■ 問題3(点数の「または」で個数)
次の配列があります。
int[] scores = { 35, 65, 72, 48, 91, 83, 56, 78 };
50未満 または 80以上 の点数がいくつあるかを数え、個数だけを1行で表示してください。
ヒント:int count = 0; をループの前に置きます。for は for (int i = 0; i < scores.Length; i++) です。条件はif (scores[i] < 50 || scores[i] >= 80) のとき count++;
「80以上」は >= 80 です(<= 80 と書かない)。
ループの後に Console.WriteLine(count); を1回書きます。Length は scores.Length です(問題2の words と取り違えない)。
■ 発展(余裕がある人)
上の scores について、40未満 または 78以上 の値だけを Listに追加し、次の順序どおりに表示してください。
- 追加した各値を foreach で1行ずつ表示する
- それらの値の合計を1回だけ表示する(ループの外で
Console.WriteLine(sum);) - 続けて、平均を1回だけ表示する(整数のままでよいです。
Console.WriteLine(sum / list.Count);のように、合計 ÷ 個数 で求めます。今回のデータでは条件に合う値が1つ以上あるので、list.Countは 0 になりません) - 続けて、それらの値の最大を1回だけ表示する(
listの中だけを対象にします) - 続けて、それらの値の最小を1回だけ表示する(
listの中だけを対象にします)
最大の求め方(例) … int max = int.MinValue; を用意し、foreach (int n in list) で if (n > max) { max = n; } のように更新します。ループの後に Console.WriteLine(max); を1回書きます。
最小の求め方(例) … int min = int.MaxValue; を用意し、foreach (int n in list) で if (n < min) { min = n; } のように更新します。ループの後に Console.WriteLine(min); を1回書きます。
発展で追加するメソッド
次のような private static メソッド を Run の外(Day25 クラスの中)に 1つ 書いてください。
- メソッド名の例:
IsExtensionTarget - 引数:
int score - 戻り値:
bool - 中身:
scoreが 40未満 または 78以上 のときtrue、そうでないときfalseをreturnで返す
Run 内の for では、次のようにします(例)。
if (IsExtensionTarget(scores[i]))
{
list.Add(scores[i]);
}
ヒント:var list = new List<int>(); で初期化し、for は i を 0 から scores.Length 未満まで。合計・平均は foreach (int n in list) で sum += n;。最大と最小は別々の foreach (int n in list) でも、同じループにまとめても構いません(表示は「各値→合計→平均→最大→最小」の順にそろえればよいです)。Add(scores[i])(点数を入れる。添字 i を Add しない)。list を組み立てる for は1つにし、同じ条件で Add を二重に呼ばないようにします。問題3と発展を1つの for にまとめなくても別ループでOK です。
⚠️ つまずきやすい点
||と&&… 「50未満 または 80以上」は||。問題2は「4以上 かつ 6以下 かつiを含む かつeで終わる」なので、条件は&&でつなぎます。- 範囲の長さ … 「4以上かつ6以下」 は
s.Length >= 4 && s.Length <= 6です。両方>=にしない。 ContainsとEndsWith…s.Contains("i")、s.EndsWith("e")のように、foreach のsに対して呼びます。別の配列と取り違えないようにします。EndsWithの大文字小文字 … 今回のwordsはすべて小文字です。"E"と"e"は別物です。- 80以上 …
>= 80です。<= 80だと意味が違い、個数がずれます。 - 78以上 … 発展のメソッド内でも
>= 78です。 - 配列名 … 問題3・発展は
scoresとscores.Length。問題1のnums・問題2のwordsと混同しない。 - count の表示 … ループの後に
Console.WriteLine(count);を必ず1回。 - 発展 … 各値 → 合計 → 平均 → 最大 → 最小の順。合計は
sum += n。最大・最小はlistだけを見て更新(scores全体と混同しない)。 - 発展のメソッド …
private static bool IsExtensionTarget(int score)の形。Runの閉じ括弧の下に書く(Runの中にネストしない。ローカル関数にしない)。 - 発展の Add …
scores[i]をAddする(i自体を Add しない)。条件に合う処理は同じ for 内で1回だけ。
🎯 今日の目的
- Day24 と同じ型を、別のデータ・別の閾値で書ける
EndsWith("...")で「末尾が一致」を書ける(問題2だけ新語)Contains/StartsWith/EndsWithの3つの文字列メソッドの使い分けがわかる&&で 文字数の範囲にContainsとEndsWithを足せる||で点数の「または」を安定させ、>=(以上) を取り違えない(80以上=>= 80)scoresとscores.Lengthを、wordsと取り違えない- 発展で、条件を
private static boolメソッド1つ にまとめ、Runから呼び出せる listに対して 合計・平均・最大・最小をforeachで扱える
次へ
次回のウォームアップは、講師から案内があります。
sh




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