C#繰り返し処理(for, foreach, while, do..while)

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:ループ処理を学ぶ

C#入門編4:配列の基礎

参考

「独習C#」4.2 繰り返し処理

「独習C#」4.3 ループの制御