#5 ループ処理
ループ処理は同じような処理を繰り返して実行する際に用いられます.
foreach文はコレクションというものを知らなければ理解しづらいと思うので,次回の配列でももう一回説明します.
for文
for(初期化式; 条件式; 更新式)
{
※ 繰り返したい処理
}
初期化式のところには初めに一度だけ実行する式で,大抵は繰り返し変数という変数を定義・初期化するために用いられます.条件式は※の処理を実行する前に毎回判定され,条件式がtrueの間※の処理が繰り返されます.更新式は※の処理の後に毎回実行される処理です.
次に具体例を見てみましょう.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LoopSample
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i + ". Hello, world!");
}
}
}
}
0. Hello, world!
1. Hello, world!
2. Hello, world!
3. Hello, world!
4. Hello, world!
##while文
while (条件式)
{
※ 繰り返したい処理
}
while文は条件式がtrueの間※の処理を繰り返すものです.for文とは違い,初期化式をwhile文の前に,更新式をwhile文の中に書く必要があります.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LoopSample
{
class Program
{
static void Main(string[] args)
{
int i = 0;
while (i < 5)
{
Console.WriteLine(i + ". Hello, world!");
i++;
}
}
}
}
0. Hello, world!
1. Hello, world!
2. Hello, world!
3. Hello, world!
4. Hello, world!
##do-while文
do
{
※ 繰り返したい処理
} while (条件式);
for文,while文は初めから条件式がfalse
なら1度も※の処理を実行しませんが,do-while文は初めから条件式がfalse
でも1度は※の処理を実行してくれるというものです.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LoopSample
{
class Program
{
static void Main(string[] args)
{
int i = 5;
do
{
Console.WriteLine(i + ". Hello, world!");
i++;
} while (i < 5);
}
}
}
5. Hello, world!
##foreach文
foreach (型 変数名 in コレクション)
{
※ 繰り返したい処理
}
foreach文は,いくつものデータをまとめて扱うコレクションを用いる際に非常に有用なループ処理です.コレクションの要素を順に変数に代入して※の処理で使えるようにしてくれるというものです.今はコレクションというものが想像しにくいと思うので,次の配列の回でもっと詳しく解説します.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LoopSample
{
class Program
{
static void Main(string[] args)
{
foreach (int i in Enumerable.Range(0, 5))
{
Console.WriteLine(i + ". Hello, world!");
}
}
}
}
0. Hello, world!
1. Hello, world!
2. Hello, world!
3. Hello, world!
4. Hello, world!
##break文
break文は一番内側のループ処理を強制的に抜ける文です.
for (int i = 0; true; i++)
{
if (i == 5) break;
Console.WriteLine(i + ". Hello, world!");
}
0. Hello, world!
1. Hello, world!
2. Hello, world!
3. Hello, world!
4. Hello, world!
このfor文は条件式にtrue
が入っているので,ずっとHello, world!
と出力し続ける無限ループのコードになってしまいます.しかし,if文によってもしi
が5
のときはbreak文を実行するようになっているので,6回目のHello, world!
は出力されずに処理が終わります.
##continue文
continue文はループ処理のcontinue文以降の処理をスキップするものです.
for (int i = 0; i < 5; i++)
{
if (i == 2) continue;
Console.WriteLine(i + ". Hello, world!");
}
0. Hello, world!
1. Hello, world!
3. Hello, world!
4. Hello, world!
continue文がなければ,このfor文は5回だけHello, world!
と出力されるものになります.しかし,またしてもif文によってもしi
が2
のときはcontinue文を実行するようになっているので,3回目のHello, world!
は出力されずに処理が中断されますが,4回目の処理から再開されます.
次回は配列について説明します.
##練習問題
100から1までカウントダウンして画面に出力するコードを書いてください.ただし,6の倍数はカウントせずに飛ばしてください.
解答例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LoopSample
{
class Program
{
static void Main(string[] args)
{
for(int i = 100; i > 0; i--)
{
if (i % 6 == 0) continue;
Console.WriteLine(i);
}
}
}
}