制御文

あらゆるアルゴリズムは次の3つの構造で実現可能と言われています(構造化定理)。

Javaでこれらを実現する制御文についてみていきます。


制御文の種類

3つの構造に対してJavaでの制御方法は次のようになります。


1. 順次処理

Javaの規約に従ってJVMが順次にプログラムを実行させます。

2. 選択(分岐)処理
  • if文
  • switch文
3. 反復(繰り返し)処理
  • for文
  • while文

▲PageTop

選択(分岐)処理

選択処理は「~のとき~する」といった場合に使用します。


if文

if文は主に択一分岐処理をおこなう制御文で、次のような構文になります。


1.条件が真のとき処理をおこなう。
if (条件) {
    条件が真のとき行う処理;
}

または処理が1行のとき”{}”を省略して

if (条件)
    条件が真のとき行う処理;

※ソースの可読性を低めるので、この省略形はあまりお勧めできません。(コーディング規約などで禁じている開発現場も多いです。)


2.条件が真のとき処理1をおこない、それ以外は処理2をおこなう。
if (条件) {
    条件が真のとき行う処理1;
} else {
    条件が偽のとき行う処理2;
}

3.条件1が真のとき処理1をおこない、条件1が偽で条件2が真のときは処理2をおこなう。それ以外は処理3をおこなう。
if (条件1) {
    条件が真のとき行う処理1;
} else if (条件2) {
    条件1が偽で条件2が真のとき行う処理2;
} else {
    条件1、条件2が共に偽のとき行う処理3;
}

・サンプルソース(Sample0401.java)

public class Sample0401 {
    public static void main(String[] args) {
        int x = 70;
        if (x >= 80) {
            System.out.println(x + "点は「優」です。");
        } else if (x >= 60) {
            System.out.println(x + "点は「良」です。");
        } else if (x >= 40) {
            System.out.println(x + "点は「可」です。");
        } else {
            System.out.println(x + "点は「不可」です。");
        }
    }
}

・実行結果

C:\dev\java>javac Sample0401.java [Enter]

C:\dev\java>java Sample0401 [Enter]
70点は「良」です。
        

switch文

switch文は多分岐処理をおこないます。構文は次の通りです。


1.式を評価して、値1のとき処理1、処理2、処理3をおこない、値2のとき処理2、処理3をおこない、値3のとき処理3をおこなう。
switch (式) {
case 値1:
    処理1;
case 値2:
    処理2;
case 値3:
    処理3;
}

2.式を評価して、値1のとき処理1をおこない、値2のとき処理2をおこない、値3のとき処理3をおこなう。
switch (式) {
case 値1:
    処理1;
break;
case 値2:
    処理2;
break;
case 値3:
    処理3;
}

3.式を評価して、値1のとき処理1をおこない、値2のとき処理2をおこない、それ以外のとき処理3をおこなう。
switch (式) {
case 値1:
    処理1;
break;
case 値2:
    処理2;
break;
default 値3:
    処理3;
}

・サンプルソース(Sample0402.java)

public class Sample0402 {
    public static void main(String[] args) {
        char x = 'B';
        switch (x) {
        case 'A':
            System.out.println("賞品の筆箱を獲得しました。");
        case 'B':
            System.out.println("賞品の消しゴムを獲得しました。");
        case 'C':
            System.out.println("賞品のえんぴつを獲得しました。");
        }
    }
}

・実行結果

C:\dev\java>javac Sample0402.java [Enter]

C:\dev\java>java Sample0402 [Enter]
賞品の消しゴムを獲得しました。
賞品のえんぴつを獲得しました。
        

▲PageTop

反復(繰り返し)処理

反復処理はよくループ処理とも言われています。繰り返し制御の方法が異なる次の2種類があります。


for文

for文は「~回繰り返す」、「~回ループさせる」といった場合に使用します。書式は次の通りです。


for (ループ制御用変数の初期化; 終了条件; ループ制御用変数の増減式) {
    処理;
}

または処理が1行のとき”{}”を省略して

for (ループ制御用変数の初期化; 終了条件; ループ制御用変数の増減式)
    処理;

次のように書くと無限ループになります。

for (;;) {
    処理;
}

・サンプルソース(Sample0403.java)

public class Sample0403 {
    public static void main(String[] args) {
        int i;
        for (i=1; i<=10; i++) {
            System.out.println("10回表示します。"+ i +"回目");
        }
    }
}

・実行結果

C:\dev\java>javac Sample0403.java [Enter]

C:\dev\java>java Sample0403 [Enter]
10回表示します。1回目
10回表示します。2回目
10回表示します。3回目
10回表示します。4回目
10回表示します。5回目
10回表示します。6回目
10回表示します。7回目
10回表示します。8回目
10回表示します。9回目
10回表示します。10回目
        

while文

while文は「~の間繰り返す」、「~の間ループさせる」といった場合に使用します。書式は次の通りです。


1.ループするかどうか判断してから処理をおこなう。
while (条件式) {
    処理;
}

または処理が1行のとき”{}”を省略して

while (条件式)
    処理;

2.処理をおこなってからループするかかどうか判断する。
do {
    処理;
} while (条件式);

または処理が1行のとき”{}”を省略して

do
    処理;
while (条件式);

3.処理内でループが終了するようループ制御用変数に変更を加えなかったり、条件式が常に真となっている場合は無限ループとなる。
while (true) {
    処理;
}

または

do {
    処理;
} while (true);

・サンプルソース(Sample0404.java)

public class Sample0404 {
    public static void main(String[] args) {
        int i = 10;
        while (i > 0) {
            i--;
            System.out.println("iが0になるまで表示します。i= "+ i);
        }
    }
}

・実行結果

C:\dev\java>javac Sample0404.java [Enter]

C:\dev\java>java Sample0404 [Enter]
iが0になるまで表示します。i= 9
iが0になるまで表示します。i= 8
iが0になるまで表示します。i= 7
iが0になるまで表示します。i= 6
iが0になるまで表示します。i= 5
iが0になるまで表示します。i= 4
iが0になるまで表示します。i= 3
iが0になるまで表示します。i= 2
iが0になるまで表示します。i= 1
iが0になるまで表示します。i= 0
        

▲PageTop

繰り返し処理の中断

for文やwhile文においてbreak文やcontinue文を使用することでループ制御またはループ内処理を中断することができます。


break文

ループ中にbreak文が読み込まれると、そこでループ制御を終了します。


・サンプルソース(Sample0405.java)

public class Sample0405 {
    public static void main(String[] args) {
        int i = 10;
        while (i > 0) {
            i--;
            if (i == 5) { // iが5のときループ制御を終了する。
                break;
            }
            System.out.println("iが0になるまで表示します。i= " + i);
        }
    }
}

・実行結果

C:\dev\java>javac Sample0405.java [Enter]

C:\dev\java>java Sample0405 [Enter]
iが0になるまで表示します。i= 9
iが0になるまで表示します。i= 8
iが0になるまで表示します。i= 7
iが0になるまで表示します。i= 6
                                   ← i=5のときループ制御を終了している。
        

continue文

ループ中にcontinue文が読み込まれると、そこでループ内処理を終了します。


サンプルソース(Sample0406.java)

public class Sample0406 {
    public static void main(String[] args) {
        int i = 10;
        while (i > 0) {
            i--;
            if (i == 5) { // iが5のとき、ここでループ内処理を終了する。
                continue;
            }
            System.out.println("iが負になるまで表示します。i= " + i);
        }
    }
}

・実行結果

C:\dev\java>javac Sample0406.java [Enter]

C:\dev\java>java Sample0406 [Enter]
iが負になるまで表示します。i= 9
iが負になるまで表示します。i= 8
iが負になるまで表示します。i= 7
iが負になるまで表示します。i= 6
iが負になるまで表示します。i= 4  ← i=5のとき出力前にループ内処理を終了している。
iが負になるまで表示します。i= 3
iが負になるまで表示します。i= 2
iが負になるまで表示します。i= 1
iが負になるまで表示します。i= 0
        

▲PageTop