条件分岐
if文
int age = 20;
if (age >= 20) {
System.out.println("成人です");
} else if (age >= 13) {
System.out.println("ティーンエイジャーです");
} else {
System.out.println("子供です");
}
三項演算子
int age = 20;
String status = (age >= 20) ? "成人" : "未成年";
System.out.println(status);
switch文
int day = 3;
switch (day) {
case 1:
System.out.println("月曜日");
break;
case 2:
System.out.println("火曜日");
break;
case 3:
System.out.println("水曜日");
break;
default:
System.out.println("その他");
}
switch式(Java 14以降)
int day = 3;
String dayName = switch (day) {
case 1 -> "月曜日";
case 2 -> "火曜日";
case 3 -> "水曜日";
case 4 -> "木曜日";
case 5 -> "金曜日";
case 6, 7 -> "週末";
default -> "不明";
};
System.out.println(dayName); // "水曜日"
パターンマッチング(Java 21以降)
Object obj = "Hello";
// instanceof のパターンマッチング
if (obj instanceof String s) {
System.out.println(s.toUpperCase());
}
// switch のパターンマッチング
String result = switch (obj) {
case Integer i -> "整数: " + i;
case String s -> "文字列: " + s;
case null -> "null";
default -> "その他";
};
ループ
for文
// 基本のfor文
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
// 逆順
for (int i = 4; i >= 0; i--) {
System.out.println(i);
}
// ステップを変更
for (int i = 0; i < 10; i += 2) {
System.out.println(i); // 0, 2, 4, 6, 8
}
拡張for文(for-each)
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
// 文字列配列
String[] fruits = {"apple", "banana", "orange"};
for (String fruit : fruits) {
System.out.println(fruit);
}
while文
int count = 0;
while (count < 5) {
System.out.println(count);
count++;
}
do-while文
int count = 0;
do {
System.out.println(count);
count++;
} while (count < 5);
// 最低1回は実行される
int x = 10;
do {
System.out.println("実行されます");
} while (x < 5); // 条件はfalseだが1回は実行
break と continue
// break - ループを抜ける
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
System.out.println(i); // 0, 1, 2, 3, 4
}
// continue - 次の反復へ
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
System.out.println(i); // 1, 3, 5, 7, 9
}
ラベル付きbreak/continue
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
break outer; // 外側のループを抜ける
}
System.out.println(i + ", " + j);
}
}
ネストしたループ
// 九九の表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.printf("%3d", i * j);
}
System.out.println();
}
実践例:素数判定
public class PrimeChecker {
public static boolean isPrime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
// 1から100までの素数を表示
for (int i = 1; i <= 100; i++) {
if (isPrime(i)) {
System.out.println(i);
}
}
}
}
実践例:フィボナッチ数列
public class Fibonacci {
public static void main(String[] args) {
int n = 10; // 10項まで表示
int a = 0, b = 1;
System.out.print(a + " " + b);
for (int i = 2; i < n; i++) {
int c = a + b;
System.out.print(" " + c);
a = b;
b = c;
}
// 0 1 1 2 3 5 8 13 21 34
}
}
まとめ
if/else if/elseで条件分岐switch式で値を返す分岐(Java 14以降)- パターンマッチングで型による分岐(Java 21以降)
for文で回数指定のループ- 拡張for文(
for-each)でコレクション走査 while/do-whileで条件付きループbreakでループを抜け、continueで次の反復へ
次回はメソッドについて学びます。