Javaの制御構造とは?プログラムの流れを変える仕組み
新人
「先輩、Javaの制御構造ってよく聞くんですが、具体的に何をするものなんですか?」
先輩
「いい質問だね。Javaの制御構造は、プログラムの流れを制御するための基本的な仕組みのことだよ。つまり、『どの処理を実行するか』『何回繰り返すか』を決める役割を持っているんだ。」
新人
「なるほど!ただ順番にコードが実行されるだけじゃないんですね?」
先輩
「そうそう。条件によって分岐したり、繰り返したりすることで、柔軟な動きを持つプログラムが作れるんだ。たとえば、if文やfor文がその代表例だね。」
新人
「if文とかfor文って、学校の授業で聞いたことあります!でも実際にどう使うのかはまだピンとこなくて……」
先輩
「じゃあ今回は、Javaの制御構造の基本からしっかり理解していこう!」
1. Javaの制御構造とは?
Javaの制御構造とは、プログラムの実行の流れを変える仕組みのことを指します。たとえば、「もし~ならこうする」「何回か繰り返す」といった条件やループを表現できます。これがあることで、Javaのプログラムは単なる手順の羅列ではなく、状況に応じた柔軟な動作が可能になります。
制御構造には大きく3つの種類があります。
- 順次処理(上から順に命令を実行する)
- 条件分岐(if文やswitch文など)
- 繰り返し(for文、while文など)
これらを理解することで、プログラムに「判断力」や「反復動作」を与えることができます。Javaの開発では、この制御構造をうまく使うことが非常に重要です。
たとえば、次のような簡単なサンプルを見てみましょう。
public class ControlExample {
public static void main(String[] args) {
int score = 80;
if (score >= 70) {
System.out.println("合格です!");
} else {
System.out.println("もう少し頑張りましょう。");
}
}
}
この例では、変数scoreが70以上なら「合格」、それ以外なら「もう少し頑張りましょう」と出力します。ifとelseが流れを変えていることがわかりますね。
合格です!
このように、Javaの制御構造を理解することで、同じ入力でも結果を変える柔軟なプログラムを書くことができます。
2. なぜ制御構造が必要なのか
プログラムというのは、単に上から順番に命令を実行するだけでは実用的なものにはなりません。現実の処理では「条件によって処理を変える」「何度も繰り返す」といった動きが必要です。これを実現するのがJavaの制御構造です。
たとえば、Webアプリケーションでログイン機能を作るとき、「入力されたパスワードが正しい場合のみ次の画面に進む」という処理が必要です。これを実現するには、条件分岐を使います。
@Controller
public class LoginController {
@RequestMapping("/loginCheck")
public String login(@RequestParam("password") String password) {
if (password.equals("admin123")) {
return "success";
} else {
return "error";
}
}
}
このように、Javaのif文を使うことで、アプリケーションの動作を条件によって変えることができます。これはSpringの@Controller構成でも基本となる考え方です。
また、繰り返し処理も非常に重要です。たとえば、商品のリストを画面に順に表示したり、同じ処理を何度も実行したりする場合に役立ちます。
public class LoopExample {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println(i + "回目の処理です。");
}
}
}
1回目の処理です。
2回目の処理です。
3回目の処理です。
4回目の処理です。
5回目の処理です。
このように、Javaのfor文を使えば、同じ処理を効率的に繰り返せます。もし制御構造がなければ、1行ずつ同じ処理を何度も書かなければならず、開発効率が大きく下がります。
制御構造を理解することは、Javaプログラミングを習得するうえで欠かせない第一歩です。今後、条件分岐やループの組み合わせを使って、より複雑なロジックを実装できるようになります。
3. 条件分岐(if文・else文・switch文の基本)
ここでは、Javaの制御構造の中でも最もよく使われる「条件分岐」について学びます。条件分岐とは、プログラムに「もし~ならこうする、そうでなければこうする」といった判断力を与える仕組みのことです。Javaでは主にif文とswitch文の2種類が使われます。
まずは、基本中の基本であるif文を見てみましょう。
public class IfExample {
public static void main(String[] args) {
int number = 10;
if (number > 0) {
System.out.println("正の数です");
} else if (number < 0) {
System.out.println("負の数です");
} else {
System.out.println("ゼロです");
}
}
}
正の数です
if文では、条件式がtrue(真)になったときにブロック内の処理が実行されます。上の例では、変数numberが正の数の場合に「正の数です」と表示されます。もし条件が当てはまらなければ、次のelse ifやelseの処理に進みます。
このように、Javaの制御構造のif文を使うことで、状況に応じて異なる処理を実行できます。例えばWebアプリケーションのログイン判定や、フォームの入力チェックなどでもよく使われます。
次に、複数の条件を分岐させるときに便利なswitch文を見てみましょう。
public class SwitchExample {
public static void main(String[] args) {
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文では、変数の値に応じて複数の分岐を行います。各caseの下に書かれた処理が実行され、breakでブロックを抜けます。もしどのcaseにも一致しなければ、defaultの処理が実行されます。これはメニュー選択や状態判定などに便利です。
条件分岐は、Javaの制御構造の中でも最も基礎的で、かつ頻繁に使われる構文です。特にif文とswitch文の違いを理解しておくことで、プログラムの分岐を柔軟に設計できるようになります。
4. 繰り返し処理(for文・while文・do-while文の違いと使い方)
条件分岐と並んでJavaの制御構造で重要なのが「繰り返し処理(ループ)」です。同じ処理を何度も行うときに使います。代表的な構文としてfor文・while文・do-while文の3つがあります。
まずは最も基本的なfor文です。回数を指定して繰り返すときに使います。
public class ForExample {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println(i + "回目の処理です。");
}
}
}
1回目の処理です。
2回目の処理です。
3回目の処理です。
4回目の処理です。
5回目の処理です。
for文は「初期化」「条件式」「更新式」の3つで構成されます。条件がtrueである限り、ブロック内の処理を繰り返します。回数が決まっている処理に最適です。
次に、条件が成立する間ずっと繰り返すwhile文を見てみましょう。
public class WhileExample {
public static void main(String[] args) {
int count = 0;
while (count < 3) {
System.out.println("繰り返し中: " + count);
count++;
}
}
}
繰り返し中: 0
繰り返し中: 1
繰り返し中: 2
while文は、条件式を先に判定してから処理を実行します。そのため、最初の条件がfalseであれば1回も実行されません。条件があいまいなときや、終了条件が動的に変化するような場合に向いています。
最後に、少し特殊なdo-while文を紹介します。これは一度必ず処理を実行してから条件判定を行う構文です。
public class DoWhileExample {
public static void main(String[] args) {
int num = 0;
do {
System.out.println("現在の値: " + num);
num++;
} while (num < 3);
}
}
現在の値: 0
現在の値: 1
現在の値: 2
do-while文は、必ず一度はブロックの処理を行います。たとえば、ユーザーに何かを入力してもらう処理など「最低1回は実行が必要」な場合に便利です。
これら3つの繰り返し処理は、それぞれに得意分野があります。for文は「回数が決まっている処理」、while文は「条件次第で終了する処理」、そしてdo-while文は「最低1回は実行する処理」に向いています。
SpringでのWebアプリケーション開発でも、たとえばデータベースのレコードを1件ずつ処理したり、ユーザー入力を何度も確認する処理など、これらの制御構造が頻繁に登場します。
繰り返し処理を正しく使い分けることで、Javaのプログラムはより効率的でミスの少ない構成になります。開発環境であるpleiades+Gradleでも、これらの制御構造は基本中の基本として必ず習得しておきましょう。
5. break文・continue文の使い方と注意点
ここからは、繰り返し処理の中でよく使われる「break文」と「continue文」について学びましょう。これらは、Javaの制御構造の中でも「ループの流れを変える特別な命令」です。
break文は、繰り返し処理を途中で抜けたいときに使います。たとえば、特定の条件に達したら処理を止めたい場合に便利です。
public class BreakExample {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
System.out.println("カウント: " + i);
}
}
}
カウント: 1
カウント: 2
カウント: 3
カウント: 4
この例では、変数iが5になった時点でbreak文が実行され、for文の繰り返しを強制的に終了します。つまり、ループの途中でも条件によって抜け出すことができるというわけです。
一方で、continue文は「その回の処理をスキップして次のループに進む」ための命令です。ループ全体を止めるのではなく、一時的にスキップする場合に使われます。
public class ContinueExample {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
System.out.println("現在の値: " + i);
}
}
}
現在の値: 1
現在の値: 2
現在の値: 4
現在の値: 5
このプログラムでは、iが3のときにcontinueが実行され、その回の出力をスキップしています。つまり「3のときだけ処理を飛ばす」という動きをしています。
このように、break文はループ全体を抜け出す命令、continue文は一時的にスキップする命令です。どちらもJavaの制御構造で非常に重要な役割を持っています。
ただし、使いすぎるとプログラムの流れが分かりづらくなるため注意が必要です。特にネスト(入れ子)構造の中で多用すると、どのループを抜けたのか分かりにくくなることがあります。初心者のうちは、まずシンプルな場面で正しく使えるように練習しましょう。
6. 制御構造を組み合わせた実践例(if+forの組み合わせ)
Javaの制御構造は、単独で使うだけでなく「組み合わせる」ことで真価を発揮します。たとえば、for文とif文を組み合わせれば、条件を満たしたときだけ繰り返し処理を行うことができます。
次の例では、1から10までの数のうち偶数だけを表示するプログラムを作ってみましょう。
public class CombineExample {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
System.out.println(i + " は偶数です");
}
}
}
}
2 は偶数です
4 は偶数です
6 は偶数です
8 は偶数です
10 は偶数です
このプログラムでは、for文で1から10まで順番に数を取り出し、if文でその数が偶数かどうかを判定しています。条件に合致したときだけ出力を行うので、結果として偶数だけが表示されます。
このように、制御構造を組み合わせると、複雑な条件を持つプログラムも簡潔に書けるようになります。たとえば、Webアプリケーションの中で「特定の条件を満たすデータだけを一覧表示する」といった処理にも応用できます。
次に、もう少し発展的な例を見てみましょう。break文とcontinue文を組み合わせることで、より柔軟な動作を実現できます。
public class AdvancedControl {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 8) {
break;
}
if (i % 2 != 0) {
continue;
}
System.out.println("偶数値: " + i);
}
}
}
偶数値: 2
偶数値: 4
偶数値: 6
ここでは、iが奇数の場合はcontinue文でスキップし、iが8になったらbreak文でループを終了しています。条件に応じて柔軟に処理を変えられるのが、Javaの制御構造の大きな強みです。
この考え方は、Springアプリケーションでもよく使われます。たとえば、ユーザーの一覧を取得して「特定の条件を満たす人だけ表示する」「ある閾値を超えたら処理を止める」といった場面に応用できます。
繰り返し処理の中で条件分岐を使いこなせるようになると、アプリケーションの処理ロジックをより直感的に設計できるようになります。初心者のうちは、シンプルなサンプルを何度も書いて、自然に理解できるようにするのがおすすめです。
7. Javaの制御構造を理解するための練習ポイント
最後に、Javaの制御構造をしっかり理解するための練習方法を紹介します。制御構造は、文法を覚えるだけではなく「実際に手を動かして動作を確認すること」が大切です。
まずは、条件分岐の練習として「入力された点数によって評価を変えるプログラム」を作ってみましょう。たとえば、80点以上なら「合格」、それ以外なら「不合格」と表示するシンプルなものです。
次に、繰り返し処理の練習として「1から10までの合計を計算するプログラム」を書いてみましょう。for文を使えば、たった数行で合計を求められます。
さらに、break文やcontinue文を試して、「ある条件で途中終了する」や「特定の値だけスキップする」といった処理を体験してみてください。実際に出力結果を見ながら、自分が思った通りに動いているかを確認することが学習の近道です。
また、pleiades+Gradle環境を使って練習することで、実際の開発に近い形で試せます。@Controller構成の小さなアプリを作り、フォーム入力に応じて条件分岐するような簡単な仕組みを作るのも良い練習になります。
たとえば、「ユーザーの年齢を入力して、20歳未満なら『未成年です』、それ以外なら『成人です』と表示する」といった処理をSpringで実装すれば、Javaの制御構造がWebアプリケーションでもどのように使われるかを体感できます。
Javaの制御構造は、プログラムの骨格となる非常に重要な要素です。順次処理、条件分岐、繰り返し処理を組み合わせて使いこなすことで、思い通りの動きをするアプリケーションを作れるようになります。
まずは小さなサンプルから始めて、少しずつ条件や繰り返しの組み合わせを増やしていきましょう。何度も試すうちに、自然と「この処理にはfor文が合うな」「ここはbreakを使うとすっきりする」といった感覚が身についていきます。
こうした積み重ねが、実際の開発現場での自信につながります。Javaの制御構造を理解することは、プログラマーとしての基礎力を養う第一歩です。