Javaの基礎知識(基礎編)

【Javaの基礎知識】条件分岐を徹底解説:if文とswitch文の使い分けと実践例

Javaのプログラムでは、実行の流れを制御するために制御構文が用いられます。制御構文には、大きく分けて「条件分岐」「繰り返し」「処理制御」の3つの種類があります。

本記事では、その中でも「条件分岐」に焦点を当て、 ifswitchの基本構造や使い方について詳しく解説します。

繰り返し処理(for文・while文)については、別の記事で解説しますので、ぜひそちらも参考にしてください。

Javaの条件分岐の基本を理解する

Javaでプログラムを作成する際、処理の流れを分岐させることは非常に重要です。

条件分岐を理解して使いこなせるようになると、実務での柔軟な対応が可能になり、より効率的でバグの少ないプログラムを書けるようになります。ここではJavaの条件分岐の基本として、条件分岐の役割、if文の基本構造、switch文の基本構造を解説していきます。

条件分岐とは何か

条件分岐とは、プログラムの処理を特定の条件によって分ける仕組みのことを指します。

例えば、ユーザーの入力が一定の値である場合にだけ特定の処理を行う場合や、異なる状況に応じて処理を変える場合などで使用されます。この仕組みにより、プログラムに柔軟性を持たせ、複雑な処理をわかりやすく記述できるようになります。

条件分岐を正しく使うことで、不要な処理を避け、エラー発生の可能性を減らし、プログラムの可読性を向上させることができます。

if文の基本構造

if文は条件分岐の中で最も基本的かつ使用頻度の高い構文です。条件式がtrueの場合に処理を実行し、falseの場合は処理をスキップします。

複数の条件を組み合わせる場合には、else ifやelseを使用して分岐を増やすことが可能です。 if文の基本構文は以下のようになります。

if (条件式) {
    処理内容;
} else {
    別の処理内容;
}

if文は条件によって実行内容を柔軟に切り替えることができ、実務で非常に役立つ構文です。

switch文の基本構造

switch文は、複数の条件を評価して該当する処理を実行する際に使用します。

if文で複数のelse ifを記述する場合と比較して、可読性が向上し、条件分岐がわかりやすくなります。

主に同じ変数の値を複数のパターンで分ける場合に使うことが多いです。 switch文の基本構文は以下のようになります。

switch (変数) {
    case 値1:
        処理内容;
        break;
    case 値2:
        処理内容;
        break;
    default:
        処理内容;
}

このようにswitch文を使用することで、複数の条件をスッキリ記述でき、メンテナンス性の高いコードを書くことが可能になります。

if文の使い方を理解する

Javaでプログラムを記述する際、if文を正しく使いこなすことは重要です。

if文を理解することで条件によって処理を切り分けることができ、柔軟なプログラムを組めるようになります。

ここではif文の基本構文とポイント、else if と else の使い方、ネストされたif文の考え方について具体的に解説します。

if文の基本構文とポイント

if文は条件によって処理を分ける基本的な方法で、条件式がtrueの場合に処理を実行し、falseの場合は処理をスキップします。

シンプルですが実務で頻繁に使用されるため、確実に理解しておくことが大切です。 if文の基本構文は以下のようになります。

if (条件式) {
    処理内容;
}

例えば、変数numが10より大きい場合に「10より大きい」と表示するプログラムは以下のように記述します。

int num = 15;
if (num > 10) {
    System.out.println("10より大きい");
}

ポイントとしては以下の点があります。

ポイント説明
条件式はboolean型の結果を返すtrueの場合に処理が実行されます
処理内容が1行のみの場合は{}を省略可能ただし省略すると可読性が下がるため推奨されません
複数条件の場合は論理演算子を使用「&&」「||」を使用し条件を組み合わせます

複雑な条件の場合は条件式を簡潔にすることで可読性が上がり、バグの発生を防ぐことが可能です。

else if と else の使い方

if文では条件がfalseの場合の処理も記述することができ、else if と else を使うことで条件分岐をさらに柔軟に記述できます。

else if は複数の条件を順番に評価したい場合に使用し、else はどの条件にも当てはまらない場合の処理を記述する際に使用します。

以下は例です。

int score = 75;
if (score >= 90) {
    System.out.println("優秀");
} else if (score >= 60) {
    System.out.println("合格");
} else {
    System.out.println("不合格");
}

この例では、scoreが90以上の場合に「優秀」、60以上90未満の場合に「合格」、60未満の場合に「不合格」と表示されます。

以下の点を押さえることが重要です。

ポイント説明
else if は必要な数だけ追加可能条件が複雑な場合でも対応可能です
評価は上から順に行われる最初にtrueとなる条件の処理が実行されます
else は条件不要で使用可能すべての条件がfalseの場合の処理を記述します

else if と else を組み合わせることで処理を細分化でき、条件分岐が明確になります。

ネストされたif文の考え方

if文の中にさらにif文を記述することを「ネスト」と呼びます。

条件の中でさらに別の条件分岐を行いたい場合に使用し、細かい条件で処理を分岐させることが可能になります。

以下はネストされたif文の例です。

int age = 20;
boolean hasTicket = true;
if (age >= 18) {
    if (hasTicket) {
        System.out.println("入場可能");
    } else {
        System.out.println("チケットが必要です");
    }
} else {
    System.out.println("18歳未満は入場できません");
}

この例では年齢が18歳以上の場合、チケットを持っているかどうかでさらに処理を分けています。

ネストを使用する場合は条件が深くなりすぎると可読性が低下するため、以下の点に注意することが重要です。

ポイント説明
ネストは2〜3階層までが目安深くなりすぎると可読性が低下します
条件の整理が重要論理演算子を使用することでネストを減らせる場合があります
インデントを統一するインデントで処理の階層を明確にします

ネストを適切に使用することで複雑な条件分岐をわかりやすく整理でき、実務でのコーディングの効率が向上します。

switch文の使い方を理解する

Javaで条件分岐を行う際、if文と並んで活躍するのがswitch文です。

switch文は特定の変数の値によって処理を分岐させる際に非常に便利であり、複数の条件をわかりやすく記述することができます。

ここではswitch文の基本構文とポイント、case と default の役割、breakの使い方について具体的に解説していきます。

switch文の基本構文とポイント

switch文は、同じ変数の値に応じて処理を分ける場合に使うと、コードが見やすくなりミスを減らせます。

特に、値が限定されている場合や条件分岐が多くなる場合に役立ちます。 基本的なswitch文の構文は以下の通りです。

switch (変数) {
    case 値1:
        処理内容;
        break;
    case 値2:
        処理内容;
        break;
    default:
        処理内容;
}

例えば曜日を判定する場合、以下のように記述します。

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文を使用することで条件ごとに記述する行数を削減でき、if文と比較して処理の流れを視覚的に捉えやすくなります。

case と default の役割

switch文ではcaseとdefaultが重要な役割を持ちます。

caseは変数の値ごとに分岐処理を設定するためのものであり、defaultはどのcaseにも一致しなかった場合に実行される処理を記述するためのものです。

以下のポイントを押さえておくことが大切です。

ポイント説明
caseは条件分岐を設定変数の値ごとに処理内容を記述します
defaultはその他の処理を記述caseに該当しない場合に実行されます
defaultは省略可能処理不要の場合は書かなくても問題ありません

例えば、変数monthに基づき季節を表示する例は以下のようになります。

int month = 5;
switch (month) {
    case 3:
    case 4:
    case 5:
        System.out.println("春");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("夏");
        break;
    default:
        System.out.println("その他の季節");
}

caseとdefaultを適切に使い分けることで、処理の抜け漏れを防ぐことができます。

breakの使い方

switch文におけるbreakは重要な役割を担っています。

breakを記述することで処理がその場で終了し、switch文の外へ処理が移動します。breakがない場合、次のcaseへ処理が続行される「フォールスルー」という状態になるため注意が必要です。

以下はbreakの動作確認用の例です。

int value = 2;
switch (value) {
    case 1:
        System.out.println("値は1");
        break;
    case 2:
        System.out.println("値は2");
        break;
    case 3:
        System.out.println("値は3");
        break;
    default:
        System.out.println("不明な値");
}

この例では、valueが2であるため「値は2」と表示された後、breakでswitch文から抜け出します。 以下のポイントを押さえておくと実務でも役立ちます。

ポイント説明
breakがないと次のcaseへ移行する意図しない処理が実行される可能性があります
caseごとにbreakを記述する処理の終了を明確にします
フォールスルーを活用する場面もある同じ処理を複数条件で実行したい場合に活用します

breakを正しく使うことで処理の流れを制御しやすくなり、バグの発生を防ぐことが可能です。

ネストされたswitch分の考え方

switch文は特定の変数の値に応じて処理を分ける際に便利ですが、条件が複雑になる場合はswitch文の中にさらにswitch文を記述する「ネスト」を活用することができます。

ネストを使用することで複数の変数や条件に基づく処理を整理しながら記述でき、処理の流れを明確にすることが可能です。例えば、曜日と午前・午後によって異なる処理を分けたい場合にネストされたswitch文を使用することが考えられます。

以下は具体的な例です。

int day = 1;
int time = 2; // 1: 午前, 2: 午後
switch (day) {
    case 1: // 月曜日
        switch (time) {
            case 1:
                System.out.println("月曜日の午前");
                break;
            case 2:
                System.out.println("月曜日の午後");
                break;
        }
        break;
    case 2: // 火曜日
        System.out.println("火曜日");
        break;
    default:
        System.out.println("その他の日");
}

このようにネストを使うことで複数条件の組み合わせに対応できますが、ネストが深くなりすぎると可読性が低下する可能性があります。必要に応じてif文との組み合わせやメソッド分割を活用し、わかりやすいコードを保つことが大切です。

if文とswitch文の違いと使い分け

Javaで条件分岐を記述する際、if文とswitch文を適切に使い分けることは効率的なコーディングとバグ防止に直結します。それぞれの文には特徴があり、処理内容や条件の種類によって適切な選択をすることが大切です。

ここでは適用シーンの比較、処理速度と可読性の比較、実務での使い分け例について具体的に解説します。

適用シーンの比較

if文とswitch文はどちらも条件によって処理を分けるために使用されますが、適用するシーンには明確な違いがあります。

条件の内容や複雑さによって選択する構文を変えることが重要です。

if文は数値、文字列、論理式など幅広い条件式を扱うことができ、複雑な条件判定や範囲による判定に適しています。一方、switch文は同じ変数の特定の値に基づく分岐に特化しており、変数の値が限定される場合に適用するとコードをシンプルにできます。

以下の表で比較します。

構文適用シーン
if文複雑な条件判定、範囲による条件分岐
switch文変数の値が限定される場合の分岐

このように適用シーンを理解して選択することで、無駄な処理を減らし可読性の高いコードを書くことが可能です。

処理速度と可読性の比較

条件分岐を使用する際には処理速度と可読性のバランスを考える必要があります。

if文とswitch文の処理速度には大きな差はありませんが、条件が多くなる場合や処理が複雑になる場合に差が出ることがあります。

switch文は同じ変数の値を比較する場合に最適化されることがあり、if文より高速に動作することがあります。特に条件が多数ある場合やcaseが多く分岐する場合はswitch文を使用する方が効率的です。

可読性については以下の通りです。

構文可読性
if文条件が複雑でも柔軟に対応可能ですが、多用すると見づらくなることがあります
switch文条件が単純でcaseが多い場合は構造が整理され、読みやすくなります

処理速度と可読性の両方を考慮しながら構文を選ぶことが重要です。

実務での使い分け例

実務でif文とswitch文を使い分ける際には、条件の種類や処理内容に応じて選択します。

以下に具体的な例を示します。 ユーザーの年齢によって処理を分ける場合、範囲で条件分岐をするためif文が適しています。

int age = 25;
if (age < 13) {
    System.out.println("子供");
} else if (age < 20) {
    System.out.println("未成年");
} else {
    System.out.println("成人");
}

一方、曜日を数値で管理し、曜日ごとの処理を行う場合はswitch文が適しています。

int day = 4;
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;
    default:
        System.out.println("該当なし");
}

このように、範囲判定や複雑な条件にはif文を、変数の限定された値による分岐にはswitch文を使うことで効率的に処理を実装できます。

実務での使い分けを意識することで保守性の高いコードを書けるようになり、トラブルシューティング時にもスムーズな対応が可能となります。

条件分岐でよくあるエラーと対策

Javaで条件分岐を記述する際、思わぬミスが原因でエラーが発生することがあります。

エラーを回避しながら正しく処理を実装するためには、よくあるエラーの内容とその対策を知っておくことが重要です。

ここでは条件式の誤り、break文の書き忘れ、データ型の不一致について具体的に解説し、実務で役立つエラー対策を紹介します。

条件式の誤り

条件分岐で多いミスの一つが条件式の誤りです。

条件式が誤っていると、期待しない結果になったり処理が実行されない問題が発生します。特に比較演算子の使い方の間違いや、条件式に使う変数の値を想定していなかった場合に起こりやすいです。

例えば「=」と「==」を誤って使うことで予期しない挙動になる場合があります。

int x = 5;
if (x = 10) {
    System.out.println("xは10です");
}

この場合、コンパイルエラーとなります。条件式では代入演算子ではなく、比較演算子「==」を使用する必要があります。 正しい記述は以下の通りです。

int x = 5;
if (x == 10) {
    System.out.println("xは10です");
}

また、複雑な条件式を記述する場合、論理演算子の使い方にも注意が必要です。条件を整理してから実装することによりミスを防止できます。

break文の書き忘れ

switch文を使用した際に多いエラーとして、break文の書き忘れがあります。break文を記述し忘れると、意図せず次のcaseの処理が実行されてしまい、予期しない結果を引き起こします。

以下はbreakを書き忘れた例です。

int day = 2;
switch (day) {
    case 1:
        System.out.println("月曜日");
    case 2:
        System.out.println("火曜日");
    case 3:
        System.out.println("水曜日");
}

この場合、dayが2のとき「火曜日」「水曜日」と連続して出力されてしまいます。正しくは以下のようにbreak文を記述する必要があります。

int day = 2;
switch (day) {
    case 1:
        System.out.println("月曜日");
        break;
    case 2:
        System.out.println("火曜日");
        break;
    case 3:
        System.out.println("水曜日");
        break;
}

このように、break文の書き忘れは条件分岐における重大なミスとなるため注意が必要です。 以下にポイントをまとめます。

ポイント説明
breakは必ず記述する次のcaseへ処理が流れるのを防ぎます
意図的にフォールスルーを使う場合を除く複数のcaseで同じ処理を実行する場合のみ省略可能です
記述忘れがないよう習慣化caseごとにbreakを記述する癖をつけます

データ型の不一致

条件分岐でよく発生するもう一つのエラーがデータ型の不一致です。

if文やswitch文で比較を行う際、比較対象のデータ型が異なるとコンパイルエラーが発生します。例えば、文字列と数値を直接比較しようとした場合、以下のようにエラーになります。

String value = "10";
if (value == 10) {
    System.out.println("一致");
}

この場合は型が異なるため比較できずエラーとなります。正しくは数値へ変換してから比較する必要があります。

String value = "10";
if (Integer.parseInt(value) == 10) {
    System.out.println("一致");
}

また、switch文で使用できる型にも制限があります。

Javaではswitch文で使える型はbyte、short、char、int、String、enum型などに限定されています。long型などはswitch文で使用できないため注意が必要です。

以下に対応策をまとめます。

ポイント説明
比較対象の型を統一異なる型同士での比較を避けます
文字列を数値に変換して比較Integer.parseIntなどを使用します
switch文で使用できる型に注意long型は使用不可です

このように、データ型の不一致はコンパイルエラーの原因になるだけでなく、処理のバグにも繋がります。比較を行う前に型を統一し、適切に条件式を記述することでエラーを未然に防ぐことが可能です。

まとめ

Javaでの条件分岐は、プログラムの処理を柔軟にする重要な要素です。

if文は複雑な条件や範囲判定に、switch文は特定の値による分岐に適しています。それぞれの特徴と注意点を理解し使い分けることで、ミスの少ないコードが書けるようになります。サンプルコードを動かして学習を深め、実務で即使えるスキルとして身につけていきましょう。

Javaの条件分岐を学んだ次は、ループ処理を理解してプログラムの効率を高めましょう。for、while、do-while の違いや無限ループを防ぐ実践例について詳しく解説しています。

▶︎【Javaの基礎知識】for, while, do-while の違いと使い分け|無限ループを防ぐ実践例

よく読まれている記事

1

IT入門シリーズ 🟢 STEP 1: ITの基礎を知る(ITとは何か?) 📌 IT初心者が最初に学ぶべき基本知識。ITの概念、ネットワーク、OS、クラウドの仕組みを学ぶ ...

2

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか? 無料で使えるだけでなく、高い柔軟 ...

3

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Javaの基礎知識(基礎編)