5日目のゴール
5日目のテーマは
「C# で“同じ種類のデータをまとめて扱う”感覚をつかむこと」 です。
ここまでで、
変数
計算
条件分岐(if)
繰り返し(for / while)
をやってきました。
今日はそこに、
「同じような値をたくさん扱うときの道具」=配列(array)
を足していきます。
「変数が増えたときのモヤモヤ」を言葉にしてみる
day1, day2, day3… が増えていくつらさ
4日目の最後に、こんなコードを書きました。
int day1 = 30;
int day2 = 45;
int day3 = 20;
int day4 = 60;
int day5 = 0;
int day6 = 50;
int day7 = 40;
int total = 0;
total = total + day1;
total = total + day2;
total = total + day3;
total = total + day4;
total = total + day5;
total = total + day6;
total = total + day7;
C#動きとしては正しいけれど、
「同じような変数がたくさんある」
「同じような行を何度も書いている」
というモヤモヤが出てきます。
ここで登場するのが「配列」です。
配列は「同じ種類の箱を並べたもの」
まずは int の配列を作ってみる
配列は、「同じ型の変数を、番号つきで並べたもの」です。
int[] scores = { 80, 90, 75, 60 };
C#この一行で、
「int 型の配列 scores を作って、
0 番目に 80、1 番目に 90、2 番目に 75、3 番目に 60 を入れる」
という意味になります。
ここでのポイントは二つです。
int[] という書き方
…「int の配列ですよ」という宣言
{ 80, 90, 75, 60 }
… 中に入れる値を並べて書いている
配列の中の一つ一つの値を「要素」と呼びます。
配列の要素にアクセスする
インデックス(番号)で取り出す
配列の中身は、「インデックス」と呼ばれる番号でアクセスします。
int[] scores = { 80, 90, 75, 60 };
Console.WriteLine(scores[0]); // 80
Console.WriteLine(scores[1]); // 90
Console.WriteLine(scores[2]); // 75
Console.WriteLine(scores[3]); // 60
C#ここで重要なのは、
「配列の番号は 0 から始まる」 というルールです。
最初の要素:インデックス 0
2 番目:インデックス 1
3 番目:インデックス 2
…というふうに続きます。
「0 から始まるの、なんか気持ち悪い…」
と感じるのは普通です。
でも、C# だけでなく多くの言語がこのルールなので、
「そういうもの」として慣れていきましょう。
配列と for 文は“親友”みたいな関係
全部の要素を順番に処理する
配列の真価は、「for 文と組み合わせたとき」に発揮されます。
using System;
class Program
{
static void Main(string[] args)
{
int[] scores = { 80, 90, 75, 60 };
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine("scores[" + i + "] = " + scores[i]);
}
}
}
C#ここで新しく出てきたのが scores.Length です。
Length は、「配列の要素数(何個入っているか)」を表します。
この例では、scores.Length は 4 です。
for 文の条件 i < scores.Length は、
「i が 0, 1, 2, 3 のあいだ繰り返す」
という意味になります。
流れとしては、
i = 0 → scores[0] を表示
i = 1 → scores[1] を表示
i = 2 → scores[2] を表示
i = 3 → scores[3] を表示
i = 4 → 条件(4 < 4)は false → 終了
という感じです。
配列の合計を求める
4日目の「sum パターン」を配列に応用する
配列と for を使えば、
「1 から 10 までの合計」と同じノリで、
「配列の中身の合計」が求められます。
using System;
class Program
{
static void Main(string[] args)
{
int[] scores = { 80, 90, 75, 60 };
int sum = 0;
for (int i = 0; i < scores.Length; i++)
{
sum = sum + scores[i];
}
Console.WriteLine("合計点は " + sum + " 点です");
}
}
C#ここでのポイントは、
sum を 0 でスタートさせる
for の中で sum = sum + scores[i]; として、
配列の要素を一つずつ足していく
という流れです。
「ループの外にある変数が、ループの中で育っていく」
というパターンは、4日目とまったく同じです。
平均値を出してみる
合計 ÷ 個数
合計が出せたら、平均もすぐです。
using System;
class Program
{
static void Main(string[] args)
{
int[] scores = { 80, 90, 75, 60 };
int sum = 0;
for (int i = 0; i < scores.Length; i++)
{
sum = sum + scores[i];
}
double average = (double)sum / scores.Length;
Console.WriteLine("合計点は " + sum + " 点です");
Console.WriteLine("平均点は " + average + " 点です");
}
}
C#ここで一つだけ新しいポイントがあります。
(double)sum / scores.Length; の (double) です。
sum は int(整数)ですが、
平均は小数になる可能性があります。
そのため、(double)sum と書いて、
「sum を double として扱ってね」と C# に伝えています。
これを「キャスト」と呼びます。
2日目でやった「int と double」の話が、ここでつながります。
配列を使って「1週間の勉強時間」を書き直す
day1〜day7 を配列にまとめる
4日目のコードを、配列でスッキリさせてみましょう。
using System;
class Program
{
static void Main(string[] args)
{
int[] studyMinutes = { 30, 45, 20, 60, 0, 50, 40 };
int total = 0;
for (int i = 0; i < studyMinutes.Length; i++)
{
total = total + studyMinutes[i];
}
Console.WriteLine("1週間の合計勉強時間は " + total + " 分です");
}
}
C#変数が 7 個並んでいたのが、int[] studyMinutes = { ... }; の一行にまとまりました。
for 文の中では、
「i 日目の勉強時間」を studyMinutes[i] で取り出して、
total に足していっています。
「同じ種類のデータがたくさんある」
→ 配列にまとめる
→ for で一気に処理する
この流れが見えてきたら、もう配列の入口はクリアです。
文字列の配列も使ってみる
string[] で「名前リスト」を作る
配列は int だけでなく、string にも使えます。
using System;
class Program
{
static void Main(string[] args)
{
string[] names = { "太郎", "花子", "次郎" };
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine("こんにちは、" + names[i] + " さん");
}
}
}
C#ここでは、
string[] names で「文字列の配列」を宣言names[0] は “太郎”names[1] は “花子”names[2] は “次郎”
という対応になっています。
配列の型は、int[](整数の配列)string[](文字列の配列)
というように、「型+[]」で表します。
5日目のミニアプリ:簡易「出席リスト」表示
名前と出席状況を配列で扱う
少しだけ工夫して、
「名前リスト」と「出席フラグ」を組み合わせてみます。
using System;
class Program
{
static void Main(string[] args)
{
string[] names = { "太郎", "花子", "次郎", "三郎" };
bool[] isPresent = { true, false, true, true };
for (int i = 0; i < names.Length; i++)
{
if (isPresent[i])
{
Console.WriteLine(names[i] + " さん:出席");
}
else
{
Console.WriteLine(names[i] + " さん:欠席");
}
}
}
}
C#ここでやっていることは、
同じインデックス i を使って、names[i] と isPresent[i] をセットで扱うisPresent[i] が true なら「出席」、false なら「欠席」と表示
という流れです。
配列+for+if が組み合わさると、
かなり「アプリっぽい」ことができるようになります。
5日目で絶対に押さえておきたいポイント
配列の“型と形”を体で覚える
配列の宣言と初期化:
int[] numbers = { 1, 2, 3, 4 };
string[] names = { "太郎", "花子" };
C#要素へのアクセス:
numbers[0]; // 1
names[1]; // "花子"
C#要素数(Length):
numbers.Length; // 4
C#for と組み合わせる基本パターン:
for (int i = 0; i < 配列.Length; i++)
{
// 配列[i] を使った処理
}
C#そして何より大事なのは、
「同じ種類のデータがたくさん出てきたら、配列を思い出す」
という感覚です。
もし余裕があればやってみてほしいこと
自分の「好きなものリスト」を配列にしてみる
例えば、
好きな食べ物
好きなゲーム
行ってみたい国
などを string[] で配列にして、
for で全部表示してみてください。
5日目のまとめ
1〜4日目で作った土台に、
5日目は「配列」という強力な道具が加わりました。
変数:1 個の値
配列:同じ型の値を、番号つきでたくさん持てる
配列+for を使えるようになると、
「データのまとまり」を扱う力が一気に上がります。
次のステップでは、
「処理のまとまり」を扱う=メソッド(関数)に進んでいきます。
データをまとめる配列と、処理をまとめるメソッド。
この二つがそろうと、コードがぐっと“設計っぽく”なっていきます。
