制御構文
- もし(if)
- 繰り返し(for)
- 繰り返し(for-each)
- 繰り返し(while)
- 繰り返し(do while)
- 分岐(switch)
- 処理を抜ける(break)
- 処理を繰り返す(continue)
- ジャンプ(goto)
もし(if)
if 文は、「もし・・・なら」という制御を実現します。次の例では、もし a の値が 3 であれば、"a is 3." を表示します。
int a = 3;
if (a == 3) {
System.out.println("a is 3.");
}
else は、「さもなくば」を意味します。次の例では、もし a の値が 3 であれば "a is 3." を、さもなくば "a is not 3." を表示します。
int a = 3;
if (a == 3) {
System.out.println("a is 3.");
} else {
System.out.println("a is not 3.");
}
else if を繰り返して使用することもできます。次の例では、もし a が 3 であれば "a is 3." を、a が 4 であれば "a is 4." を、さもなくば "a is unknown." を表示します。
int a = 3;
if (a == 3) {
System.out.println("a is 3.");
} else if (a == 4) {
System.out.println("a is 4.");
} else {
System.out.println("a is unknown.");
}
繰り返し(for)
for 文は処理を繰り返して実行する場合に用います。下記の例は、println() を 10回繰り返す例です。最初に i に 0 を代入し、i の値を ++ でインクリメントしながら、i の値が 10 よりも小さい間、System.out.println(i) の実行を繰り返します。
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
繰り返し(for-each)
Java 5 からは for-each と呼ばれる拡張for文を使用することができます。配列などのコレクションに対してその要素についてひとつずつ処理を行います。
String colors[] = {"Red", "Green", "Blue"};
for (String color : colors) {
System.out.println(color);
}
繰り返し(while)
while 文は条件が真である間処理を繰り返します。下記の例では、n の値が 0 よりも大きい間、println() の実行を繰り返します。
int n = 10;
while (n > 0) {
System.out.println(n);
n--;
}
繰り返し(do while)
do while 文は、while 文と似ていますが、条件が偽でも最低 1回は処理を実行する点がことなります。
int n = 10;
do {
System.out.println(n);
n--;
} while (n > 0);
分岐(switch)
switch 文は、条件で指定した値に応じて処理を振り分けます。条件には数値のみを指定することができます。case 文の値には固定値を指定します。実行時に値の変わる変数を指定することはできません。default は、他のどの条件にもマッチしなかった場合に実行されます。
int n = 3;
switch (n) {
case 1:
System.out.println("n is one.");
break;
case 2:
System.out.println("n is two.");
break;
case 3:
System.out.println("n is tree.");
break;
default:
System.out.println("unknwon");
break;
}
判定に使用できるのは long を除く整数型(byte, short, char, int)、列挙型(enum) でしたが Java 7 からは String も判定できるようになりました。
String color = "R";
switch (color) {
case "R": System.out.println("Red"); break;
case "G": System.out.println("Green"); break;
case "B": System.out.println("Blue"); break;
default: System.out.println("Unknown"); break;
}
Java 14 では switch を文ではなく式として参照できるようになりました。また、-> を用いたアローも採用され break が不要となりました。
String w = "Wed";
String s = switch (w) {
case "Sun" -> "Sunday";
case "Mon" -> "Monday";
case "Tue" -> "Tuesday";
case "Wed" -> "Wednesday";
case "Thu" -> "Thursday";
case "Fri" -> "Friday";
case "Sat" -> "Sataday";
default -> "Unknown";
};
System.out.println(s);
また、ひとつの case で複数の値を指定できるようになりました。
switch (n) {
case 1, 2, 3 -> "Low";
case 4, 5, 6 -> "Middle";
case 7, 8, 9 -> "High";
default -> "Unknown";
}
処理を抜ける(break)
break は、最も内側の for ループ、while ループ、do ループや、case 文の残りの処理を飛ばし、処理を抜けます。Perl言語の last文に相当します。下記の例では、i の値が 5 の時に for ループを抜け出し、finish!! を書き出します。
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
System.out.println("finish!!");
ラベルを指定することにより、多重のループを一度に抜け出すこともできます。下記の例では、i == 1、j == 5 の時に、loop1 のラベルで指定した外側の for ループを抜けます。ラベルには任意の名前をつけることができます。
loop1:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if ((i == 1) && (j == 5)) {
break loop1;
}
}
}
処理を繰り返す(continue)
continue は、最も内側の for ループ、while ループ、do ループ文の残りの処理を飛ばし、次のループを開始します。Perl言語の next文に相当します。下記の例では、i の値が 5 の時に println() の実行をスキップし、i が 6 のループに移ります。
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue;
}
System.out.println(i);
}
break と同様に、ラベルで指定した多重ループの外側のループに作用させることも可能です。
ジャンプ(goto)
Java では goto 文はキーワードとして定義されていますが、サポートされていません。
label1:
for (int i = 0; i < 10; i++) {
if (i == 5) {
goto label1: // コンパイルエラー
}
}