C#繰り返し処理(for, foreach, while, do..while)
条件分岐と並んでよく利用されるのが、繰り返し処理(反復処理)です。
繰り返し処理には、for/foreach/while/do..whileの命令があります。
for 命令
for命令は予めしてされた回数だけ処理を繰り返します。
for (初期化子; 条件; 反復子)
{
処理
}
- 初期化子は、
forブロックに入った最初のループで1度だけ実行されます- 一般的には、ここでカウンター変数(ループ変数)を初期化します
- カウンター変数は、
for命令によるループの回数を管理する変数のことです - カウンター変数には、慣例的に
i,j,kという名前をつけます。もちろんわかりやすい名前をつけても構いません。 - カウンター変数は
forブロック内でのみ有効です
- 条件は、ループを継続するための条件を表します
- ループを開始するたびに条件の判定をし、条件を満たさない場合はループを終了します
- 反復子は、ループ内の処理が1回終わるたびに実行されます
- 一般的にはカウンター変数を増減させるための代入演算子(インクリメント/デクリメント)を指指定します。
- インクリメント/デクリメント以外も使用可能です。例えば
i += 2など

for (int i = 1; i < 6; i++)
{
Console.WriteLine($"{i}番目のループです。");
}

foreach 命令
foreachは、指定された配列やコレクションの要素を取り出して、先頭から順番に処理をします。
foreach (データ型 仮変数 in 配列/コレクション)
{
処理
}
- 仮変数とは、配列やコレクションから取り出した要素を一時的に格納するための変数です
- 仮変数は操作することはできません(変数の値の上書き)
- 仮変数のデータ型は
varでも可
foreachは配列やコレクションの全ての要素にに対して行います

string str = { "うめ", "もも", "さくら" };
foreach (var val in str)
{
Console.WriteLine(val);
}
break 命令
breakは現在のループを強制的に中断させる命令です。
int i;
int sum = 0;
for (i = 1; i < 100; i++)
{
sum += i;
if (sum > 1000)
{
break;
}
}
Console.WriteLine($"合計が1000を超えるのは、1〜{i}を加算したときです"); // 「合計が1000を超えるのは、1〜45を加算したときです」と出力される

continue 命令
ループを完全に抜けてしまうbreak命令に対して、現在の周回だけスキップし、ループそのものは継続して実行するのがcontinue命令です。
int sum = 0;
for (int i = 0; i <= 100; i++)
{
if (i % 2 != 0)
{
continue;
}
sum += i;
}
Console.WriteLine($"合計値は{sum}です"); // 「合計値は2550です」と出力される

while 命令
whileは、与えられた条件式がtrue(真)である間、ループを繰り返す命令です。
while (条件式)
{
処理
}

int i = 1;
while (i < 6)
{
Console.WriteLine($"{i}番目のループです");
i++;
}
無限ループ
無限ループとは、永遠に終了しない(終了条件がtrueにならない)ループのことです。以下のコードは無限ループを起こします。
int i = 1;
while (i < 6)
{
Console.WriteLine($"{i}番目のループです");
}
無限ループは、コンピューターへの極端な負荷の原因です。
アプリだけではなく、コンピューターそのものがフリーズする可能性があります。
そのため、必ず繰り返し処理では、ループを正しく終了する方法を用意します。
ここまでで、無限ループが危険なものと説明をしましたが、プログラミングのテクニックとして意図的に無限ループを用意することがあります。
string inputCommand;
while (true)
{
Console.WriteLine("1〜3の数字を入力してください");
inputCommand = Console.ReadLine();
if (inputCommand == "1")
{
Console.WriteLine("1が入力されました");
break;
}
else if (inputCommand == "2")
{
Console.WriteLine("2が入力されました");
break;
}
else if (inputCommand == "3")
{
Console.WriteLine("3が入力されました");
break;
}
Console.WriteLine("入力が間違っています");
}
上記はユーザーからの入力が正しいものになるまで、入力を求めるプログラムです。
正しい値がユーザーから入力されたループを抜けます。
課題
C#入門編3:ループ処理を学ぶ
- chapter 1 条件によるくり返し処理1 – while
- chapter 2 条件によるくり返し処理2 – while
- chapter 3 RPGの攻撃シーンを作る
- chapter 4 0から5までを表示してみよう – for
- chapter 5 繰り返しでHTMLを作成する
- chapter 7 データを読み込んでみよう – 標準入力
- chapter 8 複数データを読み込んでみよう
- chapter 9 西暦年と平成年の対応表を作る
C#入門編4:配列の基礎
- chapter 4 ループで配列を処理しよう
- chapter 5 ループで配列を処理しよう その2
- chapter 8 代入式について詳しく学ぶ
- chapter 10 ランダムくじを作ろう
参考
「独習C#」4.2 繰り返し処理
「独習C#」4.3 ループの制御