プログラミングの世界では、条件分岐は極めて重要です。
処理を分岐させる場面はかなり多く、これをマスターすることはJava言語を学ぶ上で避けて通れません。
Javaには、『if文』と『switch文』という2つの条件分岐があります。
これらを使いこなせるようになれば、複雑なプログラムも自在に操れるようになりますよ!
この記事では、『if文』と『switch文』の基本から応用まで丁寧に解説していきます。
初心者でも理解しやすく、実践的な例を交えながら進めていくので、Javaプログラミングの力を着実に身につけることができます。
それでは一緒に条件分岐をマスターしていきましょう!
目次
if文とは?
if文は、特定の条件が真か偽かによって処理の条件分岐を行う時に使う構文です。
基本的なif文はの書き方は以下の通りです
if (条件) {
// 条件が真の場合に実行されるコード
}
これを踏まえて、if文のサンプルコードをみていきましょう。
if文のサンプルコード
int number = 10;
if (number > 0) {
System.out.println("numberは0よりも大きいです。");
}
こちらのサンプルコードは、与えられた変数numberが0より大きいかをチェックしています。
まず、1行目では変数numberに10を代入して初期化していますね。
次に、2行目ではif文を使って 変数numberが0より大きいかどうかを確認。
この場合、変数numberは10なので、条件は true となります。
その結果、if文の中の処理が実行され、「numberは0よりも大きいです。」というメッセージがコンソールに出力されます。
こちらのサンプルコードを確認したら、次はif文を使う上でルールを確認していきましょう!
if文のルール
if文を使うときに気をつけるべきルールを紹介します。
- 条件式は必ず括弧で囲むこと
- 条件が真の場合にのみブロック内のコードが実行される
- 条件式には、比較演算子や論理演算子を使用
それぞれ詳しく触れていきますね。
条件式は必ず括弧で囲むこと
if文の条件式は、必ず括弧で囲む必要があります。
例えば、以下のように括弧で囲まれた部分が条件式となります。
if (number > 0)
if文を使うときは “条件を括弧の中にいれる“ と覚えておきましょう。
条件が真の場合にのみブロック内のコードが実行される
if文の条件は真(true)である場合にのみ、ブロック内のコードが実行されます。
以下は条件に一致せずfalseとなったときのものです。
int number = 5;
//変数numberは10より小さいので条件はfalse
if(number > 10){
System.out.println("コードが実行されました。");//falseなのでここは実行されずにスキップ
}
System.out.println("スキップされました。");//ブロック外のここが実行される
条件が偽(false)である場合、ブロック内のコードは実行されずにスキップされます。
条件式には、比較演算子や論理演算子を使用
条件式には、さまざまな比較演算子(==, !=, >, <, >=, <=)や論理演算子(&&, ||, !)を使用して、複雑な条件を設定できます。
これにより、複数の条件を組み合わせて、より柔軟な条件分岐を実現できますよ。
int number = 10;
boolean isBranch = true;
// 比条件式
if (number > 0 && isBranch) {
System.out.println("コードが実行されました。");
}
上記は1行目に変数numberに10を代入して初期化。
2行目は変数isBranchにtrueを入れています。
5行目の条件式を見てみましょう。
これは「1つ目の条件がtrue “かつ” 2つ目の条件がtrue」のときはブロック内のコードが実行されます。
1つ目の条件は変数numberが0より大きいかをチェックします。
2つ目の条件では変数isBranchがtrueかどうかをチェックします。
今回はいずれもtrueとなっているのでブロック内のコードが実行されるということです。
else ifとルール
if文には複数の条件をチェックするためにelse ifという分岐方法があります。
else ifを使えば複数の条件を順番に行うことが可能です。
int number = 0;
if (number > 0) {
System.out.println("numberは0よりも大きいです。");
} else if (number < 0) {
System.out.println("numberは0よりも小さいです。");
} else {
System.out.println("numberは0という数字です。");
}
上記を1つずつ確認していきましょう。
まず、1行目では変数numberに0を代入して初期化を行なっていますね。
3行目の条件式ではnumberが0より大きいかをチェックしています。
5行目の条件式ではnumberが0よりも小さいかをチェックしています。
7行目では条件式がなくelseだけが書かれています。これは前の条件式のいずれにも該当しない場合の処理を書く場所です。
今回の変数numberには0が入っていましたね?
そのため、1つ目の条件式と2つ目の条件式には一致しません。
したがって、elseにある「numberは0という数字です。」というテキストがコンソール画面に出力されます。
条件式と論理演算子
複雑な条件式を作るときは論理演算子を使用します。
主な論理演算子は以下のとおり
&&(AND) | 両方の条件が真の場合にのみ真 |
---|---|
||(OR) | どちらかの条件が真の場合に真 |
!(NOT) | 条件の真偽を反転 |
まずは1つずつみてみましょう。
if(1つ目の条件 && 2つ目の条件){
//ここに処理
}
&&(AND)はAかつBの条件に一致するときに使われます。
いずれも一致していなくてはいけない、ということですね。
if(1つ目の条件 || 2つ目の条件){
//ここに処理
}
||(OR)はAまたはBの条件に一致するときに使われます。
いずれかに一致していればOKということです。
if(!条件){
//ここに処理
}
!(NOT)は否定条件式で、「〜でない場合」とも言います。
条件が一致していない場合は処理を行うということですね。
いずれも実務で使う論理演算子ですので、しっかりマスターしておきましょう!
スコープの注意点
if文を使う上で注意すべきなのはスコープです。
スコープとは、変数やメソッドが有効となる範囲のことを指します。
Javaでは、スコープの範囲が決まっているため、その範囲内でしか変数やメソッドを使用できません。
スコープの種類は大きく3つあります。
それぞれ触れていきますね
ブロックスコープ
ブロック(波括弧 {} で囲まれた範囲)内で宣言された変数は、そのブロック内でのみ有効です。
▼正常系
int number = 10; // if文の外で定義
if (true) {
System.out.println("numberは" + number); // 正常終了する
}
// ブロック外でもnumberが使える
System.out.println("numberは" + number); // 正常終了する
}
▼異常系
if (true) {
int number = 10; // if文の中で定義
System.out.println("numberは" + number); // 正常終了する
}
// ブロックスコープ外のためnumberは使えない
//System.out.println("numberは" + number); // 異常
}
ブロックを抜けると、その変数は使用できなくなります。
上記の変数numberはif文の中で定義されたものです。
if文の{}の中で使う分には構わないのですが、それ以外の場所では使用できません。
もしif文の{}外でも使いたい場合は、正常系のように変数をif文の前に定義しておくとよいです。
メソッドスコープ
メソッド内で宣言された変数は、そのメソッド内でのみ使えます。
▼正常系
public static void main(String[] args) {
int number = addNumbers(5, 10); // 正常系:メソッド内での変数の使用
System.out.println("Sum: " + number); // 正常系:メソッド内での変数の使用
}
public static int addNumbers(int a, int b) {
int sum = a + b; // メソッド内で変数sumを宣言
return sum;
}
▼異常系
public static void main(String[] args) {
int number = addNumbers(5, 10); // 正常系:メソッド内での変数の使用
System.out.println("Sum: " + number); // 正常系:メソッド内での変数の使用
// エラー:sumは別のメソッドの変数なのでスコープ外
// System.out.println("Sum again: " + sum); // 異常
public static int addNumbers(int a, int b) {
int sum = a + b; // メソッド内で変数sumを宣言
return sum;
}
メソッドを抜けると、その変数は使用できなくなるので注意が必要です。
別のメソッド内でも同じ変数名を使いたい場合は、メソッドの中に定義するのではなくクラス内で定義するとよいですよ。
クラススコープ
▼正常系
public class ScopeExample {
private static int number; // クラススコープの静的フィールド
public static void main(String[] args) {
// numberに値を設定
number = 10;
// numberの値を表示
System.out.println("numberの値は:" + number);
}
}
▶️異常系
public class ScopeExample {
private static int number; // クラススコープの静的フィールド
public static void main(String[] args) {
// numberに値を設定
number = 10;
// numberの値を表示
System.out.println("numberの値は:" + number);
}
}
public class Test {
public static void main(String[] args) {
// 別のクラスからScopeExampleクラスの静的フィールドに直接アクセスしようとする
System.out.println("ScopeExampleクラスのnumberの値は:" + ScopeExample.number);
}
}
ScopeExampleクラスの中で、numberという静的フィールドを定義しています。
Testクラスのmainメソッド内でScopeExample.numberという形式で、ScopeExampleクラスの静的フィールドに直接アクセスしようとしていますね。
しかし、numberはprivate修飾子で定義されているため、他のクラスから直接アクセスすることはできません。
そのため、コンパイルエラーが発生します。
ここについては完全初心者の方は難しいと感じる部分だと思うので、また別の記事で詳しく触れていきたいと思います。
まずはブロックスコープ、メソッドスコープの2つをしっかり抑えておいてくださいね。
クラススコープなどはJava SilverやJava Goldといった資格でも出てくる内容です。
もし資格を取ろうと思っている人は黒本と呼ばれる書籍を読んで学ぶことをおすすめします!
switch文とは?
switch文は、複数の条件をチェックするためのもう一つの方法です。
特に、複数の値を持つ変数の値をチェックする場合に役立ちます。
基本的なswitch文は以下をご覧ください。
switch (変数) {
case 値1:
// 値1の場合に実行されるコード
break;
case 値2:
// 値2の場合に実行されるコード
break;
default:
// どのcaseにも一致しない場合に実行されるコード
}
基本的な書き方を学んだらサンプルコードを見ていきましょう。
switch文のサンプルコード
以下のswitchコードは、曜日に基づいてメッセージを表示する条件式にしました。
int day = 3;
switch (day) {
case 1:
System.out.println("月曜日です。");
break;
case 2:
System.out.println("火曜日です。");
break;
case 3:
System.out.println("水曜日です。");
break;
case 4:
System.out.println("木曜日です。");
break;
case 5:
System.out.println("金曜日です。");
break;
default:
System.out.println("土日のいずれかです。");
}
1行目には、変数dayに3を代入した初期化をしています。
そして、3行目のswitch文の条件式に変数を入れてます。
ここでは、変数dayの3に一致するcaseを探します。
case 3が該当し、「水曜日です。」というテキストがコンソール画面に表示されます。
switch文のルール
switch文は整数、文字、列挙型、文字列などをチェックするのに使えます。
各caseブロックの終わりには通常breakステートメントを使うのが基本です。
なぜなら、該当したcaseが終わっても次のcaseまで実行されてしまうからです。
breakを入れることにより、次のケースに進むことなくswitch文が終了できます。
不必要な処理を行わないためにも、各caseの終わりにbreakを入れるようにしてくださいね。
defaultの使用
defaultブロックには、どのcaseにも一致しない場合に実行されるコードを定義します。
if文でいうところのelseに近いですね。
予期せぬ処理にならないためにもswitch文を使う時は必ず用意しておきましょう。
continueとbreakについて
continueとbreakは、ループや条件分岐内で使用される制御ステートメントです。
breakは処理を終える時に使います。
一方で、とある条件のときは処理をスキップして次の処理へ進ませたいときもありますよね。
そんな時に使うのが continue です。
break | ループやswitch文を終了させるときに使います。 |
---|---|
continue | 現在のループを終了し、次のループに進みます。 |
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // ループを終了
}
if (i % 2 == 0) {
continue; // 次の反復に進む
}
System.out.println(i);
}
上記のプログラムは奇数のみをコンソール画面に出力し、iが5になるとループを終了するというものです。
if文のcontinueのところは偶数のときはスキップするという動きをします。
>> 未経験からでもITエンジニアを目指す人におすすめの転職サービスを紹介
if文とswitch文の使い分け
ここまで、条件分岐である『if文』と『switch文』について触れてきましたが、「結局どっちを使うべきなの?」と思う人もいるのではないでしょうか。
私も習い始めのときは「なんで2つもあるの?」「どっちを使えばいいの?」と戸惑うことが多かったです。
実務では基本的にif文を使うことが多いですが、稀にswitch文が使われることも。
そこで、if文とswitch文はどういうときに適しているのかを紹介しますね。
if文 | 複雑な条件式や範囲をチェックする場合に最適 |
---|---|
switch文 | 特定の値に基づいて分岐する場合に最適 |
if文は論理演算子を使って複雑な条件付けを行いたいときに選択します。
また、条件が範囲で表現される場合(例: if (age >= 18 && age <= 65))などもif文が適していると言えるでしょう。
ただし、if文は条件が長くなるとコードが読みづらくなるデメリットがあります。
一方でsiwtch文は値が整数や列挙型などである場合に最適です。
同じ変数に対する複数の条件分岐を一括して書けるのでコードが簡潔になります。
しかしながら、switch文にもデメリットがあります。
caseラベルには整数や列挙型の値のみ使用でき、文字列や複雑な条件式は直接扱えません。
複雑な条件や範囲のチェックには向いていないため、それらの場合はif文の方が適していると言えます。
上記メリット・デメリットを踏まえて「この処理ならどっちの条件式が適切か」を考えながら適切な条件分岐方法を選ぶようにしてくださいね。
まとめ
本記事では、Javaの条件分岐である『if文』と『switch文』について詳しく解説しました。
基本的な構文から具体的な例、応用までをカバーし、初心者でも理解しやすいように説明しました。
条件分岐をマスターすることで、より様々な処理プログラムを作成できるようになります。
この記事を参考にして、実際にコードを書いてみてくださいね!
Javaを0から学ぶ人におすすめの書籍はこちら
>> 未経験からでもITエンジニアを目指す人におすすめの転職サービスを紹介

独学に限界を感じてはいませんか?
専門的な学習を受けたい20代の人にオススメなのが ITエンジニア就職に特化した【ウズカレIT】です。
ウズカレITがオススメな理由は以下の通り。
- IT講師による手厚い学習サポート:プロのIT講師から直接サポートが受けられます。
- IT学習サポートが無料:費用を気にせず学習に集中できます。
- Java言語を基礎から学べる:全くの未経験でも基礎からしっかり学べます。
- 就職/転職サポートも充実:学習だけでなく、就職や転職のサポートも万全です。
- 面接対策も安心:面接対策にも力を入れており、安心して挑戦できます。
※29歳以下限定のサービス
ウズカレITは、ITエンジニアを目指す初心者や業界未経験者、求職者に特化しています。入社後の定着度は93.6%と高く、一人一人に合った職場選びをサポートしてくれる点も魅力の一つです。
興味のある方は、まずは初回カウンセリングを受けてみてはいかがでしょうか!