Javaでのif-else文による複雑な条件分岐の実装方法を詳しく解説

Javaにおいて、条件分岐はプログラムの流れを制御するための基本的な要素です。その中でもif-else文は、特定の条件に基づいて異なる処理を行うための最も基本的な構文です。しかし、実際の開発では単純な条件だけでなく、複雑な条件を評価する必要が頻繁に生じます。例えば、ユーザー入力に基づいて異なる処理を行う場合や、複数の要素を組み合わせた判定が必要な場合などです。本記事では、Javaにおけるif-else文を使った複雑な条件分岐の実装方法について、具体例を交えながら詳しく解説していきます。これにより、複雑な条件を効率的に扱い、バグの少ない堅牢なプログラムを作成するための基礎を学びます。

目次

if-else文の基本構造

Javaにおけるif-else文は、指定された条件が真であるか偽であるかに応じて、異なるコードブロックを実行するための構文です。基本的なif-else文の構造は次のようになります。

if (条件) {
    // 条件が真の場合に実行されるコード
} else {
    // 条件が偽の場合に実行されるコード
}

条件部分には、真偽値を返す式を指定します。この式が真(true)であれば、ifブロック内のコードが実行され、偽(false)であればelseブロック内のコードが実行されます。elseブロックは省略可能であり、条件が偽の場合に特定の処理を行わない場合は記述しなくても構いません。

単純なif文の例

次のコードは、入力された数値が正の数かどうかを判定するシンプルなif文の例です。

int number = 5;

if (number > 0) {
    System.out.println("この数は正の数です。");
}

この例では、numberが0より大きい場合に「この数は正の数です。」というメッセージが出力されます。もしnumberが0以下であれば、何も出力されません。

if-else文の例

次に、if-else文を用いて数値が正の数か、負の数か、またはゼロであるかを判定する例を示します。

int number = -3;

if (number > 0) {
    System.out.println("この数は正の数です。");
} else {
    System.out.println("この数は正の数ではありません。");
}

この例では、numberが0より大きい場合には「この数は正の数です。」が出力され、それ以外の場合には「この数は正の数ではありません。」が出力されます。if-else文を使うことで、条件に応じた柔軟な処理が可能となります。

複数条件の評価方法

Javaのif-else文を使用する際、単一の条件だけでなく、複数の条件を評価する場面が多く存在します。これらの条件は、論理演算子を使って組み合わせることができ、複雑なロジックを実現するための基盤となります。

論理演算子を使った複数条件の評価

複数の条件を評価するためには、&&(論理積:AND)や||(論理和:OR)といった論理演算子を使用します。これらの演算子を組み合わせることで、複数の条件がすべて真である場合や、いずれか一つでも真である場合に特定の処理を実行することができます。

int age = 25;
boolean hasLicense = true;

if (age >= 18 && hasLicense) {
    System.out.println("運転が可能です。");
} else {
    System.out.println("運転ができません。");
}

この例では、ageが18以上で、かつhasLicenseが真である場合に「運転が可能です。」というメッセージが表示されます。両方の条件が満たされない場合は「運転ができません。」が出力されます。

条件の組み合わせによる複雑な評価

次に、複数の条件を組み合わせて複雑な判定を行う例を見てみましょう。

int age = 16;
boolean hasPermission = true;
boolean hasLicense = false;

if ((age >= 18 && hasLicense) || (age >= 16 && hasPermission)) {
    System.out.println("特別な条件により運転が許可されます。");
} else {
    System.out.println("運転が許可されません。");
}

この例では、ageが18歳以上でかつhasLicenseが真の場合、またはageが16歳以上でhasPermissionが真の場合に「特別な条件により運転が許可されます。」というメッセージが出力されます。それ以外の場合は「運転が許可されません。」が出力されます。

複数条件の評価における注意点

複数の条件を組み合わせる場合、条件の評価順序に注意が必要です。&&||の優先順位は比較演算子よりも低いため、複雑な条件式では括弧を使用して評価順序を明確にすることが推奨されます。また、条件が増えるとコードが読みにくくなるため、必要に応じて条件を分割し、可読性を保つことが重要です。

複数条件の評価を正しく理解し活用することで、より柔軟で強力な条件分岐を実現することができます。次のセクションでは、さらに複雑な条件分岐を可能にするネストされたif-else文について解説します。

ネストされたif-else文の活用

Javaにおけるネストされたif-else文は、複数の条件を階層的に評価することで、より複雑な条件分岐を実現するための強力な手法です。これは、if-else文の内部にさらにif-else文を配置することで、条件ごとに異なる処理を行うことが可能になります。

ネストされたif-else文の基本構造

ネストされたif-else文の基本構造は次のようになります。

if (条件1) {
    // 条件1が真の場合に実行されるコード
    if (条件2) {
        // 条件1が真かつ条件2が真の場合に実行されるコード
    } else {
        // 条件1が真かつ条件2が偽の場合に実行されるコード
    }
} else {
    // 条件1が偽の場合に実行されるコード
}

この構造を利用することで、条件1の結果に応じてさらに細かく条件を分岐させることができます。

ネストされたif-else文の具体例

次に、ネストされたif-else文を使用して、ユーザーの年齢と居住地域に基づいた特定のメッセージを表示する例を見てみましょう。

int age = 20;
String location = "Japan";

if (age >= 18) {
    if (location.equals("Japan")) {
        System.out.println("日本では成人とみなされます。");
    } else {
        System.out.println("他の国の成人年齢と照らし合わせてください。");
    }
} else {
    System.out.println("まだ成人ではありません。");
}

この例では、ageが18歳以上の場合に、さらにlocationが「Japan」であるかどうかをチェックします。locationが「Japan」であれば「日本では成人とみなされます。」というメッセージが表示され、それ以外の場合は「他の国の成人年齢と照らし合わせてください。」というメッセージが表示されます。ageが18歳未満であれば、「まだ成人ではありません。」というメッセージが表示されます。

ネストされたif-else文の利点と注意点

ネストされたif-else文は、複数の条件を組み合わせた複雑なロジックを実装するのに非常に有用です。ただし、ネストが深くなるとコードの可読性が低下しやすいため、適切なコメントを付けたり、必要に応じてメソッドに分割したりして、コードを整理することが重要です。

ネストされたif-else文を適切に使用することで、複雑な条件分岐を柔軟に管理し、プログラムの動作をきめ細かく制御することができます。次のセクションでは、論理演算子を用いた条件分岐についてさらに詳しく解説します。

論理演算子を用いた条件分岐

複雑な条件分岐を実装する際、Javaのif-else文では論理演算子を使うことで、複数の条件を効率的に組み合わせることができます。論理演算子を使うことで、条件式の柔軟性が増し、より高度な判定が可能になります。

論理演算子の種類と基本的な使い方

Javaには主に以下の3つの論理演算子があります。

  1. AND演算子 (&&)
    両方の条件が真である場合に真を返します。
   if (条件1 && 条件2) {
       // 条件1と条件2の両方が真の場合に実行されるコード
   }
  1. OR演算子 (||)
    いずれか一方、または両方の条件が真である場合に真を返します。
   if (条件1 || 条件2) {
       // 条件1または条件2が真の場合に実行されるコード
   }
  1. NOT演算子 (!)
    条件が真であれば偽、偽であれば真を返します。単一の条件を反転させる際に使用します。
   if (!条件) {
       // 条件が偽の場合に実行されるコード
   }

論理演算子を使った複数条件の組み合わせ例

次に、AND演算子とOR演算子を使った具体的な条件分岐の例を示します。

int age = 22;
boolean hasLicense = true;
boolean isExperienced = false;

if (age >= 18 && hasLicense && isExperienced) {
    System.out.println("この人はプロフェッショナルドライバーです。");
} else if (age >= 18 && hasLicense) {
    System.out.println("この人は普通のドライバーです。");
} else if (age >= 18 || hasLicense) {
    System.out.println("この人は条件付きでドライバーです。");
} else {
    System.out.println("この人はドライバーではありません。");
}

この例では、年齢 (age) と運転免許 (hasLicense)、経験 (isExperienced) の3つの条件を組み合わせて、それぞれの条件に応じたメッセージを表示しています。

  • すべての条件を満たす場合は「この人はプロフェッショナルドライバーです。」と表示されます。
  • 年齢が18歳以上で免許があるが経験がない場合は「この人は普通のドライバーです。」と表示されます。
  • 年齢が18歳以上または免許がある場合には「この人は条件付きでドライバーです。」と表示されます。
  • どの条件も満たさない場合は「この人はドライバーではありません。」と表示されます。

条件分岐の複雑化と注意点

論理演算子を組み合わせることで、非常に柔軟な条件分岐が可能になりますが、その分、コードが複雑化するリスクもあります。特に、AND演算子とOR演算子を混在させる場合、評価の順序に注意が必要です。必要に応じて括弧を使い、条件のグルーピングを明確にすることで、意図しない動作を防ぐことができます。

論理演算子を適切に活用することで、if-else文の力を最大限に引き出し、複雑なロジックをシンプルかつ効果的に表現できるようになります。次のセクションでは、if-else文とswitch文の違いと使い分けについて解説します。

スイッチ文との比較

Javaで条件分岐を行う際、if-else文の他にもう一つ強力な選択肢がスイッチ文です。スイッチ文は、複数の条件に基づいて異なるコードブロックを選択して実行する場合に便利です。ここでは、if-else文とスイッチ文の違いと、それぞれの使い分けについて解説します。

スイッチ文の基本構造

スイッチ文は、特定の変数の値に基づいて、複数のケースの中から該当するケースを選んで実行する構造です。基本的な構造は以下のようになります。

switch (変数) {
    case 値1:
        // 値1の場合に実行されるコード
        break;
    case 値2:
        // 値2の場合に実行されるコード
        break;
    // 必要に応じてさらにケースを追加
    default:
        // どのケースにも該当しない場合に実行されるコード
}

スイッチ文では、switchで指定した変数の値がcaseで指定した値と一致する場合、そのケースに対応するコードが実行されます。break文は、対応するコードの実行後にスイッチ文を終了するために使われます。defaultケースは、どのケースにも該当しない場合の処理を定義します。

if-else文とスイッチ文の比較

if-else文とスイッチ文の主な違いは、次の通りです。

  1. 用途:
  • if-else文: 複雑な条件式を評価する場合や、複数の異なる条件を組み合わせて判定する場合に適しています。例えば、論理演算子や不等号を使った条件分岐が必要な場合に有効です。
  • スイッチ文: 特定の変数が特定の値をとる場合に、それぞれ異なる処理を行う場合に適しています。例えば、特定の数値や文字列に対する処理を切り替える際に便利です。
  1. 可読性とメンテナンス性:
  • if-else文: 複雑な条件分岐を表現する際にコードが長くなりがちですが、柔軟性があります。
  • スイッチ文: 同じ変数に対して複数の値を比較する場合、スイッチ文はif-else文よりも読みやすく、コードが整理されやすいです。
  1. パフォーマンス:
  • if-else文: 複数の条件が順番に評価されるため、条件が多いときはパフォーマンスに影響することがあります。
  • スイッチ文: ケースが多くてもスイッチ文の方が効率的に評価されることが多いため、単純な値の比較であればスイッチ文の方がパフォーマンスが良い場合があります。

スイッチ文の使用例

次に、スイッチ文を使って、特定の曜日に応じたメッセージを表示する例を見てみましょう。

String day = "Monday";

switch (day) {
    case "Monday":
        System.out.println("週の始まりです。頑張りましょう!");
        break;
    case "Friday":
        System.out.println("週末が近づいてきました!");
        break;
    case "Saturday":
    case "Sunday":
        System.out.println("楽しい週末を過ごしましょう!");
        break;
    default:
        System.out.println("平日を乗り切りましょう!");
}

この例では、変数dayの値に応じて、異なるメッセージが表示されます。"Monday""Friday"など、特定の曜日に応じた処理が簡潔に書かれているため、読みやすくなっています。

使い分けのガイドライン

  • 複雑な条件や論理演算を伴う場合は、if-else文を使用します。
  • 単一の変数に対する値の比較を行う場合は、スイッチ文を使用すると、コードが簡潔でわかりやすくなります。

スイッチ文とif-else文を適切に使い分けることで、コードの可読性と効率性を向上させることができます。次のセクションでは、条件分岐を最適化するためのテクニックについて解説します。

条件分岐の最適化

Javaにおける条件分岐の最適化は、コードのパフォーマンスを向上させ、可読性を高めるために重要です。特に、複雑なif-else文やネストされた条件分岐が多くなると、適切な最適化を行わないと、コードが冗長になり、バグの原因にもなりかねません。このセクションでは、条件分岐を最適化するためのいくつかのテクニックを紹介します。

条件の順序を最適化する

if-else文では、条件が上から順に評価されます。そのため、頻繁に真になる条件や、評価が速い条件を先に置くことで、全体のパフォーマンスを向上させることができます。例えば、以下のように順序を考慮することが重要です。

if (x == 0) {
    // 条件1の処理
} else if (y > 100) {
    // 条件2の処理
} else if (z == 50) {
    // 条件3の処理
}

上記の例では、x == 0の条件が最初に評価されます。もしこの条件が最も頻繁に真になるのであれば、パフォーマンスの向上に寄与します。また、条件の評価コストが低いもの(例えば、数値比較など)は、先に評価されるように配置することが推奨されます。

デッドコードの排除

デッドコードとは、決して実行されることのないコードを指します。複雑な条件分岐の中で、このようなコードが含まれていると無駄が生じるため、定期的にコードを見直し、不要な部分を削除することが重要です。例えば、次のようなコードは改善の余地があります。

if (x > 0) {
    // 条件1の処理
} else if (x > 10) {
    // 条件2の処理(実際には到達しない)
}

この場合、x > 10x > 0の後に評価されるため、実行されることはありません。こうした無駄な条件は削除するか、条件式を修正する必要があります。

条件式の簡略化

複雑な条件式は、読みやすさを損なうだけでなく、バグを引き起こす可能性があります。可能な限り、条件式を簡略化し、必要に応じて変数に分解することで、コードの可読性と保守性を向上させることができます。

// 複雑な条件式
if ((a > b && c < d) || (e == f && g != h)) {
    // 処理
}

// 簡略化
boolean condition1 = (a > b && c < d);
boolean condition2 = (e == f && g != h);

if (condition1 || condition2) {
    // 処理
}

このように条件式を変数に分解することで、コードが読みやすくなり、条件の意図がより明確になります。

メソッドや関数による分割

条件分岐が複雑で長くなる場合、条件式をメソッドや関数に分割して再利用可能な形にすることが有効です。これにより、コードの可読性が向上し、テストやデバッグも容易になります。

if (isEligibleForDiscount(user)) {
    // 割引の処理
}

private boolean isEligibleForDiscount(User user) {
    return user.isMember() && user.getAge() > 18;
}

このように、条件をメソッド化することで、分岐のロジックが整理され、再利用可能なコードになります。

コードの見直しとリファクタリング

条件分岐の最適化は一度きりの作業ではなく、コードの進化に伴い定期的に見直しとリファクタリングが必要です。特に、新たな機能が追加された場合や、既存のロジックが変更された場合には、最適化された状態を保つためにコードを再評価することが重要です。

これらの最適化テクニックを活用することで、Javaの条件分岐を効率的かつ効果的に管理できるようになります。次のセクションでは、メソッドを用いた条件分岐の整理について詳しく解説します。

メソッドを用いた条件分岐の整理

複雑な条件分岐を扱う際、コードの可読性と保守性を向上させるために、条件分岐のロジックをメソッドに分割して整理することが有効です。これにより、コードの再利用性が高まり、テストやデバッグも容易になります。

メソッドによる条件分岐のカプセル化

メソッドを使って条件分岐をカプセル化することで、複雑なロジックを単純化し、コード全体を整理することができます。以下は、メソッドを用いた条件分岐の整理の例です。

public class DiscountCalculator {

    public static void main(String[] args) {
        User user = new User("Alice", 25, true);

        if (isEligibleForDiscount(user)) {
            System.out.println("割引が適用されます。");
        } else {
            System.out.println("割引の適用外です。");
        }
    }

    private static boolean isEligibleForDiscount(User user) {
        return isAdult(user) && isMember(user);
    }

    private static boolean isAdult(User user) {
        return user.getAge() >= 18;
    }

    private static boolean isMember(User user) {
        return user.isMember();
    }
}

この例では、ユーザーが割引の対象となるかどうかを判定するロジックを、isEligibleForDiscountというメソッドにカプセル化しています。さらに、年齢や会員ステータスの判定をそれぞれisAdultisMemberというメソッドに分割しています。これにより、条件分岐のロジックが明確になり、各メソッドがそれぞれの役割を果たしていることが明示的になります。

メソッドによるロジックの再利用

メソッドを用いることで、同じ条件分岐のロジックを複数箇所で再利用できるようになります。これにより、コードの重複を避け、一貫性を保つことができます。

public class PromotionChecker {

    public static void main(String[] args) {
        User user = new User("Bob", 30, true);

        if (isEligibleForPromotion(user)) {
            System.out.println("プロモーションが適用されます。");
        }

        if (isEligibleForDiscount(user)) {
            System.out.println("割引が適用されます。");
        }
    }

    private static boolean isEligibleForPromotion(User user) {
        return isAdult(user) && user.getPurchaseAmount() > 100;
    }

    private static boolean isEligibleForDiscount(User user) {
        return isAdult(user) && isMember(user);
    }

    private static boolean isAdult(User user) {
        return user.getAge() >= 18;
    }

    private static boolean isMember(User user) {
        return user.isMember();
    }
}

この例では、isAdultisMemberといったメソッドが、割引適用条件とプロモーション適用条件の両方で再利用されています。これにより、条件ロジックを一度定義すれば、他の部分でも一貫して使用することができます。

メソッド分割によるテストの容易さ

メソッドに条件分岐を分割することは、ユニットテストの作成にも有利です。各メソッドが単独で機能するため、テストを個別に実行して、特定の条件が正しく評価されるかを簡単に確認できます。

public class DiscountCalculatorTest {

    @Test
    public void testIsAdult() {
        User user = new User("Charlie", 20, false);
        assertTrue(DiscountCalculator.isAdult(user));

        User minor = new User("David", 16, false);
        assertFalse(DiscountCalculator.isAdult(minor));
    }

    @Test
    public void testIsMember() {
        User member = new User("Eve", 30, true);
        assertTrue(DiscountCalculator.isMember(member));

        User nonMember = new User("Frank", 30, false);
        assertFalse(DiscountCalculator.isMember(nonMember));
    }
}

このように、メソッドを分割しておくことで、それぞれのロジックが正しく動作するかを独立してテストすることができ、バグの早期発見と修正が容易になります。

コードの見通しを良くするためのベストプラクティス

  • 単一責任の原則: 各メソッドは1つの責任だけを持つように設計します。条件分岐が複数の責任を持たないようにすることで、コードが簡潔になり、理解しやすくなります。
  • 命名の明確化: メソッド名は、そのメソッドが何をするかを明確に表すものにします。これにより、コードを読むだけでその意図を理解しやすくなります。

メソッドを使って条件分岐を整理することで、コードの可読性とメンテナンス性が大幅に向上します。次のセクションでは、実際のプログラム例を使って、複雑な条件分岐の実装方法を具体的に解説します。

実例:複雑な条件分岐の実装

ここでは、実際のプログラムを使って、複雑な条件分岐の実装方法を具体的に解説します。この例では、オンラインストアの注文処理システムを想定し、注文の内容に応じた割引適用や送料の計算を行います。

注文処理システムの概要

このシステムでは、以下の条件に基づいて割引や送料を計算します。

  1. 会員であるかどうか:会員には特別な割引が適用されます。
  2. 注文金額が一定額を超えているか:一定額以上の注文には送料無料を適用します。
  3. 商品の種類に応じた特典:特定のカテゴリーの商品には追加の割引が適用されます。

これらの条件を組み合わせて、ユーザーに対する最終的な請求額を計算します。

条件分岐を含むコード例

以下に、注文処理システムの実装例を示します。

public class OrderProcessor {

    public static void main(String[] args) {
        User user = new User("Alice", true);
        Order order = new Order(120.00, "Electronics");

        double finalAmount = calculateFinalAmount(user, order);
        System.out.println("最終請求額: " + finalAmount + "円");
    }

    private static double calculateFinalAmount(User user, Order order) {
        double discount = 0.0;
        double shipping = 10.0; // デフォルトの送料

        // 会員に対する割引
        if (user.isMember()) {
            discount += 10.0; // 10円の割引
        }

        // 注文金額が100円を超える場合、送料を無料に
        if (order.getAmount() > 100) {
            shipping = 0.0;
        }

        // 特定カテゴリーの商品に対する割引
        if (order.getCategory().equals("Electronics")) {
            discount += 5.0; // 5円の追加割引
        }

        // 最終的な金額の計算
        double finalAmount = order.getAmount() - discount + shipping;
        return finalAmount;
    }
}

class User {
    private String name;
    private boolean isMember;

    public User(String name, boolean isMember) {
        this.name = name;
        this.isMember = isMember;
    }

    public boolean isMember() {
        return isMember;
    }
}

class Order {
    private double amount;
    private String category;

    public Order(double amount, String category) {
        this.amount = amount;
        this.category = category;
    }

    public double getAmount() {
        return amount;
    }

    public String getCategory() {
        return category;
    }
}

このコードは、ユーザーが会員かどうか、注文金額が一定額を超えているか、商品のカテゴリーが「Electronics」かどうかを条件として、最終的な請求額を計算します。

  • 会員割引: 会員の場合は10円の割引が適用されます。
  • 送料無料: 注文金額が100円を超えると、送料が無料になります。
  • カテゴリー割引: 商品のカテゴリーが「Electronics」の場合、さらに5円の割引が適用されます。

コードの拡張と応用

この実装をさらに拡張することで、他の条件にも対応できるようになります。例えば、複数の割引条件を組み合わせたり、特定のプロモーションコードを適用したりする場合には、別のメソッドやクラスを追加してロジックを管理することができます。

private static double applyPromotionCode(Order order, String promoCode) {
    double discount = 0.0;

    if (promoCode.equals("SUMMER20")) {
        discount += 20.0; // 20円の割引
    }

    return discount;
}

このように、システムの要件が変化しても、メソッドを使って柔軟に条件分岐を拡張できます。

実装のまとめと注意点

複雑な条件分岐を扱う際は、コードの可読性を保つためにメソッド分割やコメントを活用し、ロジックが明確になるように工夫することが重要です。また、テストケースを十分に用意して、各条件が正しく処理されているかを確認することが、システムの安定性を保つ鍵となります。

このように、複雑な条件分岐を適切に管理することで、柔軟で保守性の高いコードを実装することができます。次のセクションでは、この内容を基に演習問題を提供します。

演習問題

ここでは、これまでに解説した内容を基に、Javaでif-else文やスイッチ文を使った複雑な条件分岐の理解を深めるための演習問題を提供します。これらの問題に取り組むことで、実践的なスキルを身に付けることができます。

問題1: 賞与計算プログラムの実装

概要: 会社の従業員に対する賞与を計算するプログラムを作成します。賞与の金額は、従業員の勤務年数、部門、およびパフォーマンス評価に基づいて決定されます。

条件:

  • 勤務年数が5年以上の従業員は、基本賞与に対して10%のボーナスを受け取ります。
  • 営業部門に所属する従業員は、さらに5%のボーナスを受け取ります。
  • パフォーマンス評価が「優秀」である場合、さらに10%のボーナスが加算されます。

仕様:

  1. Employeeクラスを作成し、yearsOfService(勤務年数)、department(部門)、performanceRating(パフォーマンス評価)のプロパティを持たせます。
  2. 賞与を計算するメソッドcalculateBonus(Employee employee, double baseBonus)を実装し、最終的な賞与金額を返すようにします。
  3. メソッド内でif-else文を使い、上記の条件を適用して賞与を計算します。

テスト:

  • 勤務年数が6年、営業部門所属、パフォーマンス評価が「優秀」の従業員に対して、基礎賞与が100,000円の場合の賞与金額を計算してみましょう。

問題2: 複数商品に対する割引計算

概要: 顧客が複数の商品を購入した際に、特定の条件に基づいて割引を適用するプログラムを作成します。

条件:

  • 全体の購入金額が200円を超えると、5%の割引が適用されます。
  • 購入した商品のいずれかが「Electronics」カテゴリーの場合、さらに3%の割引が適用されます。
  • 会員である場合、さらに2%の割引が追加されます。

仕様:

  1. Productクラスを作成し、name(商品名)、price(価格)、category(カテゴリー)のプロパティを持たせます。
  2. 顧客が購入した商品リストを引数に取り、最終的な割引後の合計金額を返すメソッドcalculateTotalPrice(List<Product> products, boolean isMember)を実装します。
  3. メソッド内でスイッチ文とif-else文を組み合わせて、各条件に応じた割引を計算します。

テスト:

  • 「Laptop(Electronics)」と「Book(Literature)」を購入し、合計金額が250円、顧客が会員である場合の最終的な支払い金額を計算してみましょう。

問題3: スイッチ文を使ったレストラン注文システム

概要: レストランでの注文処理を行うプログラムを作成します。各メニューに対して異なるメッセージを表示し、注文が終了した場合に合計金額を表示します。

条件:

  • メニュー項目として「Pizza」、「Pasta」、「Salad」を提供します。
  • 各メニューの価格は次の通りです: Pizza = 15円, Pasta = 12円, Salad = 8円。
  • 注文が終了すると、合計金額を表示します。

仕様:

  1. Menu列挙型を作成し、メニュー項目を定義します。
  2. スイッチ文を使用して、選択されたメニューに応じた価格を加算し、メッセージを表示するメソッドprocessOrder(Menu menu)を実装します。
  3. すべての注文が終了した後、合計金額を表示するプログラムを作成します。

テスト:

  • 「Pizza」、「Salad」、「Pasta」を順に注文した場合の合計金額を計算し、各メニューに対するメッセージと共に表示してみましょう。

解答方法と次のステップ

各問題に取り組み、実装が完了したら、実際にプログラムを動かして結果を確認してみてください。もし正しく動作しない場合は、条件分岐のロジックやメソッドの使い方を再確認し、コードを修正してください。これらの演習問題を通じて、複雑な条件分岐を効果的に扱うスキルを磨きましょう。

次のセクションでは、本記事の内容をまとめます。

まとめ

本記事では、Javaにおけるif-else文を使った複雑な条件分岐の実装方法について、基本的な構造から具体的な応用例まで詳しく解説しました。複数の条件を評価する方法や、ネストされたif-else文、論理演算子の活用、スイッチ文との比較、そして条件分岐の最適化やメソッドによる整理について学びました。

また、演習問題を通じて、実際のプログラムにおける複雑な条件分岐の実装方法を練習し、理解を深める機会を提供しました。これらの知識とスキルを活用することで、より複雑なロジックを持つアプリケーションを効率的に設計・実装できるようになるでしょう。

今後、さらなるプログラミング技術の向上を目指して、実践的なコードの書き方やリファクタリング、最適化のテクニックを継続的に学んでいくことが重要です。

コメント

コメントする

目次