あらゆるアルゴリズムは次の3つの構造で実現可能と言われています(構造化定理)。
Javaでこれらを実現する制御文についてみていきます。
3つの構造に対してJavaでの制御方法は次のようになります。
Javaの規約に従ってJVMが順次にプログラムを実行させます。
選択処理は「~のとき~する」といった場合に使用します。
if文は主に択一分岐処理をおこなう制御文で、次のような構文になります。
if (条件) {
条件が真のとき行う処理;
}
または処理が1行のとき”{}”を省略して
if (条件)
条件が真のとき行う処理;
※ソースの可読性を低めるので、この省略形はあまりお勧めできません。(コーディング規約などで禁じている開発現場も多いです。)
if (条件) { 条件が真のとき行う処理1; } else { 条件が偽のとき行う処理2; }
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 (式) { case 値1: 処理1; case 値2: 処理2; case 値3: 処理3; }
switch (式) { case 値1: 処理1; break; case 値2: 処理2; break; case 値3: 処理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] 賞品の消しゴムを獲得しました。 賞品のえんぴつを獲得しました。
反復処理はよくループ処理とも言われています。繰り返し制御の方法が異なる次の2種類があります。
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 (条件式)
処理;
do { 処理; } while (条件式);
または処理が1行のとき”{}”を省略して
do 処理; while (条件式);
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
for文やwhile文においてbreak文やcontinue文を使用することでループ制御またはループ内処理を中断することができます。
ループ中に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文が読み込まれると、そこでループ内処理を終了します。
サンプルソース(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