今回は反復処理(for文)についてです(ループ処理とも呼ばれます)。
反復処理を使うと条件が満たされるまで同じ処理を繰り返し行うことができます。
たとえば、5回同じ処理を繰り返し行いたいという場合に for文 を使います。
for文は大体が配列やコレクションに対して使われます。
繰り返し処理をして配列の各要素をに対して何かをするという感じです。
また、条件を満たす間繰り返しを行うwhile文というのもあります。
気になる方は、[C# 入門] 反復処理(while)についてを見てください。
for文の使い方
for文の構文はこんな感じです。
for (変数の初期化式; 条件式; 1ループ終わる毎に行う式) {
// 繰り返し行う処理を記述
}
最初に例に出した、5回同じ処理を繰り返し行いたい場合、こんな感じになります。
for (int i = 1; i <= 5; i++) {
System.Console.WriteLine($"{i}回目の処理です。");
}
出力結果はこんな感じになります。
1回目の処理です。
2回目の処理です。
3回目の処理です。
4回目の処理です。
5回目の処理です。
構文の説明です。
変数の初期化式でfor用の変数の宣言・初期化を行います。
この変数を条件式に使って何回繰り返しを行うかを決めたり、
いま何回目の繰り返しかを判断するのに使ったりします。
例では int i = 1; の部分です。ループ内で使う変数iの宣言と初期化(初期値を1にする)をしています。
条件式はその条件がtrueの間繰り返しが行われます。
例では i <= 5; の部分です。iが5以下の場合にループします。
1ループ終わる毎に行う式は名前の通り1ループが終わるたびにその式が実行されます。
例では i++ の部分です。 1ループが終わるたびにiに1を足しています。
1回目のループでは i は 1、
2回目のループでは i は 2とi が 1ずつ増えていき、6になったらfor文が終わります。
i++の ++ はインクリメント演算子といってその変数に1を加算するという意味になります。
i = i + 1 や i += 1と同じ意味になります。
配列に対してfor文を使う
最初に書いたようにfor文は配列の各要素に対して処理をしたいときによく使われます。
たとえば、 配列の各要素に同じ値を代入したいというときは、
int[] ary = new int[5];
for (int i = 0; i < ary.Length; i++) {
ary[i] = 99;
}
↑こんな感じで、配列の要素の数だけ繰り返して値を代入します。
配列のインデックスは0から始まるのでfor用変数の初期化式では 変数i に0を代入します。
ここを違う値にすれば配列の n番目 から後ろに同じ値を代入することができます。
条件式には 変数i が要素数より小さい場合は繰り返しを行うように指定します。
配列の要素数は「配列の変数.Length」で取得できます。
例の場合だと、ary.Lengthは5で配列のインデックスは0~4までなので i < ary.Length となります。
forブロック { } の省略
for文のブロック { } 内の処理が1つだけの場合、{ } を省略することができます。
int[] ary = new int[5];
for (int i = 0; i < ary.Length; i++) ary[i] = 99; // { } を省略できる
ループの途中で処理を抜ける(break)
breakキーワードを使うと繰り返し処理を行っている途中でfor文を抜けることができます。
たとえば、for文で配列の各要素を順番に調べていって目的の値が見つかったら繰り返しを終了する、ということができます。
int[] ary = new int[] { 3, 6, 1, 8, 5, 3, 7, 9, 4 };
for (int i = 0; i < ary.Length; i++) {
System.Console.WriteLine(ary[i]);
if (ary[i] == 8) break; // 8が見つかったら繰り返しを終了
}
出力結果はこんな感じです。
3
6
1
8
ループの途中で次のループにスキップする(continue)
continueキーワードを使うと繰り返しの処理の途中で次の繰り返しへスキップすることができます。たとえば、for文で配列の各要素を順番に調べていって値が5以上の時だけ処理をしたい、
ということができます。
int[] ary = new int[] { 3, 6, 1, 8, 5, 3, 7, 9, 4 };
for (int i = 0; i < ary.Length; i++)
{
if (ary[i] < 5) continue;
System.Console.WriteLine(ary[i]);
}
出力結果はこんな感じです。
6
8
5
7
9
無限ループに気を付けよう
for文の条件式の指定を間違えるとループが永遠に終わらない状態(無限ループ)になってしまうので注意してください。
int[] ary = new int[] { 1, 2, 3, 4, 5 };
for (int i = 0; i > -5; i++)
{
System.Console.WriteLine(i);
}
C# 記事まとめページに戻る(他のサンプルコードもこちら)
コメント