繰り返し文
C#の制御文には、大きくわけて、繰り返し文、条件文の2つがあります。
ここでは、繰り返し文であるwhile文、do while文、for文、foreach文の構造と使い方について書いていきたいと思います。
C#制御文の条件文については、こちらにまとめています。
while文
while文は、上図のような構造をしていて、終了条件が1(真)の間、ブロック内の処理を繰り返すというものです。
while文は、最初に終了条件の評価がなされます。終了条件が真のとき、ブロック内の処理が実行されます。ブロック内の処理が終わった時点で、再度、終了条件を評価し、条件が真の間、ブロック内の処理を繰り返します。
終了条件が0(偽)となった時点で、ブロック外のプログラムに処理を進めます。
終了条件は、処理を実行する前に評価されるので、はじめから条件が偽の場合は、ブロック内処理を一度も実行することなくプログラムが進みます。
using System;
namespace LoopTest
{
class LoopTest
{
static void Main(string[] args)
{
int i;
//while文
Console.WriteLine("--while loop--");
i = 10;
while( i > 0 ){
Console.WriteLine("{0:d}",i);
i--;
}
}
}
}
--while loop--
10
9
8
7
6
5
4
3
2
1
do while文
while文と同様に繰り返し処理を行う制御文として、do while文があります。
while文との違いは、終了条件の評価をブロック内処理実行後に行うことです。
従って、ブロック内の処理は、終了条件によらず必ず1回は実行されることになります。
この点以外の処理の流れは、while文と同じです。
using System;
namespace LoopTest
{
class LoopTest
{
static void Main(string[] args)
{
int i;
//do while文
Console.WriteLine("--do while loop--");
i = 10;
do{
Console.WriteLine("{0:d}",i);
i--;
}while( i > 0 );
}
}
}
--do while loop--
10
9
8
7
6
5
4
3
2
1
for文
for文もwhile文、do while文と同様に繰り返し処理を行う制御文です。
for文は、終了条件の判断に使う変数の初期化と更新が終了条件の評価とセットになっているのでプログラム行数を減らして見やすい繰り返し文を作ることができます。
処理順序としては、まず、初期値の処理が実行され、次に終了条件が評価されます。終了条件が真の場合、ブロック内の処理が実行され、最後にステップの更新が実行されます。通常、ステップ更新には、終了条件の判断をする変数をインクリメント(+1)するかデクリメント(ー1)するなどの加減算を行います。ステップ更新後、再度、終了条件の評価が行われ、評価が真の間は、ブロック内処理、ステップ更新、終了条件評価の繰り返しを行います。
for文は、初期値がはじめから終了条件を満たさない場合、ブロック内の処理を一度も実行することなく繰り返し処理を終了します。
using System;
namespace LoopTest
{
class LoopTest
{
static void Main(string[] args)
{
int i;
//for文
Console.WriteLine("--for loop--");
for(i=0;i<10;i++){
Console.WriteLine("{0:d}",i);
}
}
}
}
--for loop--
0
1
2
3
4
5
6
7
8
9
foreach文
foreach文は、配列のようなコレクションオブジェクトからすべての要素を読みだすときに使用する繰り返し処理です。
コレクションの要素が順番に指定した変数に代入されて、最後の要素になるまで処理が繰り返されます。
foreach文では、繰り返し回数は、コレクションの要素の数になります。
using System;
namespace LoopTest
{
class LoopTest
{
static void Main(string[] args)
{
int i;
//foreach文
Console.WriteLine("--foreach loop--");
int[] a = new int[10]{1,2,3,4,5,6,7,8,9,10};
foreach(int j in a){
Console.WriteLine("{0:d}",j);
}
}
}
}
--foreach loop--
1
2
3
4
5
6
7
8
9
10
コメント