Javaのif文の基本と注意点を徹底解説

Javaプログラミングにおいて、if文は条件分岐を行うための最も基本的な構文です。プログラムの流れを制御し、特定の条件に応じて異なる処理を実行するために使用されます。if文は非常にシンプルでありながら、柔軟な条件評価を可能にするため、Javaを学び始めた初心者から熟練のプログラマーまで、すべてのレベルで頻繁に利用されます。本記事では、if文の基本的な使い方から、実際の開発で注意すべきポイントまでを詳しく解説し、エラーを避けるためのヒントや実践的な例を紹介します。これにより、Javaの条件分岐についてしっかりと理解を深めることができるでしょう。

目次

if文の基本構文

Javaのif文は、特定の条件が真(true)である場合にのみ、指定されたコードブロックを実行するための構文です。基本的な構文は以下の通りです。

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

この構文において、条件式は真偽値(trueまたはfalse)を返す式であり、通常は比較演算子や論理演算子を使用して書かれます。条件式が真であれば、{}内のコードが実行され、偽(false)であれば実行されません。

例えば、変数xが10より大きいかどうかをチェックし、大きければメッセージを表示するコードは次のように書けます。

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

この例では、変数xが10より大きいので、条件式が真となり、System.out.printlnが実行されます。これがJavaのif文の基本的な使い方です。

条件式の書き方

条件式は、if文の動作を決定する最も重要な部分です。条件式が真(true)を返す場合にのみ、if文内のコードが実行されます。条件式の基本的な書き方は、比較演算子や論理演算子を用いて行います。

比較演算子を使用した条件式

比較演算子を使用すると、変数や値の間で大小や等価の関係を評価できます。主な比較演算子は以下の通りです。

  • == : 等しい
  • != : 等しくない
  • > : より大きい
  • < : より小さい
  • >= : 以上
  • <= : 以下

例えば、変数aが変数bと等しいかどうかをチェックする条件式は次のように書けます。

int a = 5;
int b = 5;
if (a == b) {
    System.out.println("aとbは等しい");
}

この例では、abが等しいため、条件式は真となり、メッセージが表示されます。

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

複数の条件を組み合わせる場合は、論理演算子を使用します。主な論理演算子は以下の通りです。

  • && : 論理積(AND)- すべての条件が真の場合に真
  • || : 論理和(OR)- 少なくとも一つの条件が真の場合に真
  • ! : 否定(NOT)- 条件が偽の場合に真

例えば、変数xが0より大きく、かつ10以下であるかどうかをチェックする条件式は次のように書けます。

int x = 7;
if (x > 0 && x <= 10) {
    System.out.println("xは0より大きく、10以下です");
}

この例では、xが0より大きく10以下であるため、条件式は真となり、メッセージが表示されます。

条件式を正確に記述することが、プログラムの期待通りの動作を保証するための鍵です。条件式の書き方を理解することで、if文をより効果的に利用できるようになります。

elseとelse ifの使い方

if文では、条件が真(true)の場合に特定の処理を行うことができますが、条件が偽(false)の場合にも別の処理を行いたい場合があります。このときに使用するのがelseelse ifです。

elseの使い方

elseは、if文の条件が偽である場合に実行されるコードブロックを定義します。基本構文は次の通りです。

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

例えば、変数yが10以上かどうかをチェックし、それ以外の場合には異なるメッセージを表示するコードは次のように書けます。

int y = 8;
if (y >= 10) {
    System.out.println("yは10以上です");
} else {
    System.out.println("yは10未満です");
}

この例では、yが10未満であるため、elseブロックのコードが実行され、「yは10未満です」というメッセージが表示されます。

else ifの使い方

else ifは、最初のif文の条件が偽であり、かつ他の特定の条件をチェックしたい場合に使用します。これにより、複数の条件を連続して評価できます。基本構文は次の通りです。

if (条件式1) {
    // 条件式1が真の場合に実行されるコード
} else if (条件式2) {
    // 条件式1が偽で、条件式2が真の場合に実行されるコード
} else {
    // すべての条件が偽の場合に実行されるコード
}

例えば、変数zの値が10以上、5以上10未満、5未満のいずれかに応じて異なるメッセージを表示するコードは次のように書けます。

int z = 7;
if (z >= 10) {
    System.out.println("zは10以上です");
} else if (z >= 5) {
    System.out.println("zは5以上10未満です");
} else {
    System.out.println("zは5未満です");
}

この例では、zが5以上10未満であるため、else ifブロックのコードが実行され、「zは5以上10未満です」というメッセージが表示されます。

else ifを使うことで、複数の条件を順番に評価し、最初に真と評価された条件に対応する処理を実行させることができます。これにより、より複雑な条件分岐を効率的に実装できます。

ネストされたif文の注意点

ネストされたif文とは、if文の内部にさらにif文を含める構造のことです。これにより、複雑な条件分岐を行うことが可能になりますが、使用する際にはいくつかの注意点があります。

ネストされたif文の基本例

以下は、ネストされたif文の基本的な例です。ここでは、2つの変数abを評価し、両方の条件を満たした場合にのみ特定の処理を実行します。

int a = 5;
int b = 3;

if (a > 0) {
    if (b > 0) {
        System.out.println("aもbも正の数です");
    }
}

この例では、aが0より大きい場合に、さらにbが0より大きいかをチェックし、両方の条件が真である場合にメッセージを表示します。

ネストの深さと可読性の低下

if文をネストすることで、条件分岐を細かく制御できますが、ネストが深くなるとコードの可読性が低下し、理解しづらくなる可能性があります。以下は、ネストが深くなりすぎた例です。

if (条件1) {
    if (条件2) {
        if (条件3) {
            if (条件4) {
                // かなり深いネストされた処理
            }
        }
    }
}

このようにネストが深くなると、コードが複雑になり、バグが発生しやすくなります。また、どの条件に対応する処理がどこで行われているのかを把握するのが困難になります。

可読性を保つための工夫

ネストされたif文の可読性を保つためには、次のような工夫が考えられます。

1. 複数の条件をまとめる

複数の条件を一つのif文でチェックすることで、ネストを減らすことができます。論理演算子を使って条件を組み合わせることで、コードがすっきりとします。

if (条件1 && 条件2 && 条件3 && 条件4) {
    // 条件がすべて真の場合の処理
}

2. 早期リターンを利用する

条件が偽である場合に早期リターンを使うことで、ネストを避けることができます。これにより、コードの流れが直線的になり、可読性が向上します。

if (条件1) {
    return;
}
if (条件2) {
    return;
}
if (条件3) {
    return;
}
// 条件をすべて通過した場合の処理

3. 条件分岐をメソッドに分割する

複雑な条件分岐を別のメソッドに分割して処理することで、メインの処理をシンプルに保つことができます。

if (条件1) {
    processCondition1();
}

これらの工夫を取り入れることで、ネストされたif文の可読性を保ち、バグを防ぐことができます。複雑な条件分岐を扱う際には、常にコードの見やすさと理解しやすさを意識することが重要です。

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

if文では、複数の条件を一つの条件式として組み合わせることがよくあります。このとき、論理演算子を使用することで、複数の条件を一度に評価し、より複雑な条件分岐を実現できます。Javaで使用される主な論理演算子には、&&(論理積)、||(論理和)、および!(否定)があります。

論理積(&&)の使用

論理積(AND)を表す&&は、複数の条件がすべて真である場合に、全体の条件式が真になります。例えば、変数xが0より大きく、かつyが10以下であるかをチェックする場合、以下のように書きます。

int x = 5;
int y = 8;

if (x > 0 && y <= 10) {
    System.out.println("xは0より大きく、yは10以下です");
}

この例では、x > 0y <= 10の両方が真であるため、条件式全体が真となり、メッセージが表示されます。

論理和(||)の使用

論理和(OR)を表す||は、複数の条件のうち少なくとも一つが真であれば、全体の条件式が真になります。例えば、変数aが0であるか、変数bが0であるかをチェックする場合、以下のように書きます。

int a = 0;
int b = 5;

if (a == 0 || b == 0) {
    System.out.println("aまたはbのどちらかが0です");
}

この例では、a == 0が真であるため、条件式全体が真となり、メッセージが表示されます。

否定(!)の使用

否定(NOT)を表す!は、条件式の真偽を逆にします。例えば、変数isValidが偽である場合にメッセージを表示するには、次のように書きます。

boolean isValid = false;

if (!isValid) {
    System.out.println("isValidはfalseです");
}

この例では、isValidが偽であるため、!isValidが真となり、メッセージが表示されます。

複雑な条件式の例

複数の論理演算子を組み合わせて、より複雑な条件式を作成することもできます。例えば、次のようなコードでは、変数xが10以上であり、かつyが5以下、またはzが負の値である場合にメッセージを表示します。

int x = 12;
int y = 3;
int z = -1;

if (x >= 10 && (y <= 5 || z < 0)) {
    System.out.println("条件を満たしました");
}

この例では、x >= 10が真であり、かつy <= 5が真であるため、全体の条件式が真となり、メッセージが表示されます。

論理演算子を使って条件式を組み合わせることで、複雑な条件分岐をシンプルに記述できます。これにより、プログラムの流れを効果的に制御し、より柔軟で強力な条件処理を実現することが可能になります。

条件式における型の扱い

Javaのif文では、条件式が真(true)か偽(false)かを評価しますが、その条件式に使用するデータ型には注意が必要です。Javaは強い型付け言語であり、条件式には特定の型しか使用できません。ここでは、条件式で扱うデータ型について説明し、注意すべきポイントを紹介します。

ブール型(boolean)の使用

条件式には、通常、ブール型(boolean)の値が使われます。ブール型は、trueまたはfalseの二つの値のみを取ります。これは、if文の条件式として最も基本的かつ適切な型です。

boolean isActive = true;

if (isActive) {
    System.out.println("アクティブな状態です");
}

この例では、変数isActivetrueであるため、条件式が真となり、メッセージが表示されます。

数値型の比較

条件式には、整数型(intlongなど)や浮動小数点型(floatdouble)の数値を比較することもよくあります。これらの型は、比較演算子(==!=><>=<=)を使用して評価されます。

int score = 85;

if (score >= 60) {
    System.out.println("合格です");
}

この例では、変数scoreが60以上であるかをチェックしており、条件が満たされる場合にメッセージが表示されます。

文字列の比較

Javaでは、文字列(String)の比較には==演算子を使わず、equalsメソッドを使うことが推奨されます。==は参照の比較(オブジェクトのメモリ位置を比較)を行い、equalsは値の比較を行うためです。

String username = "admin";

if (username.equals("admin")) {
    System.out.println("管理者としてログインしました");
}

この例では、usernameが”admin”という文字列と一致するかをチェックし、一致する場合にメッセージが表示されます。

型の不一致によるエラー

条件式で異なる型を直接比較すると、コンパイルエラーが発生します。例えば、int型とString型を比較することはできません。

int age = 20;

if (age == "20") { // エラー: 型の不一致
    System.out.println("エラーが発生します");
}

このように、異なる型を比較する際には、型変換を行うか、適切な型で比較する必要があります。

キャストと型変換の使用

条件式で異なる型の値を比較する場合、キャストや型変換が必要になることがあります。例えば、浮動小数点型を整数型にキャストして比較することができます。

double price = 19.99;

if ((int) price == 19) {
    System.out.println("価格は19ドルです");
}

この例では、priceint型にキャストしてから比較しており、キャスト後の値が条件に一致するかをチェックしています。

条件式での型の扱いは、プログラムの正確性に直結します。適切な型を選び、誤った型変換や比較を避けることで、エラーを未然に防ぐことができます。

短絡評価の仕組み

短絡評価(short-circuit evaluation)は、論理演算子を使った条件式で、式全体の結果がすでに確定した時点で、残りの条件を評価せずに結果を返す仕組みです。Javaでは、&&(論理積)と||(論理和)の演算子において短絡評価が行われます。これにより、パフォーマンスの向上や不要な計算の回避が可能になりますが、特定のケースでは注意が必要です。

論理積(&&)での短絡評価

&&演算子を使った条件式では、最初の条件が偽(false)であれば、残りの条件は評価されません。なぜなら、論理積の特性上、すべての条件が真でなければ全体の結果が真にならないためです。

int x = 5;
int y = 10;

if (x > 10 && y < 20) {
    System.out.println("条件を満たしました");
}

この例では、x > 10が偽であるため、y < 20の条件は評価されず、System.out.printlnは実行されません。これにより、不要な評価を回避し、効率的な処理が行われます。

論理和(||)での短絡評価

||演算子を使った条件式では、最初の条件が真(true)であれば、残りの条件は評価されません。論理和の特性上、少なくとも一つの条件が真であれば、全体の結果が真になるためです。

int x = 15;
int y = 5;

if (x > 10 || y < 0) {
    System.out.println("少なくとも一つの条件を満たしています");
}

この例では、x > 10が真であるため、y < 0の条件は評価されず、すぐにSystem.out.printlnが実行されます。

短絡評価の注意点

短絡評価を使用する際には、次の点に注意が必要です。特に、条件式の中で副作用(変数の変更やメソッドの呼び出し)を伴う場合、意図しない動作が発生する可能性があります。

int a = 0;

if (a != 0 && (10 / a) > 1) {
    System.out.println("このコードは安全に実行されます");
}

この例では、a != 0が偽であるため、(10 / a)の部分は評価されず、10 / aのようなゼロ除算エラーを避けることができます。しかし、a != 0が真であった場合、(10 / a)が評価されてエラーが発生します。このように、短絡評価を利用してエラーや不要な計算を回避することが可能です。

短絡評価を利用した効率化の例

短絡評価は、特にパフォーマンスが重要な場面で効果的です。以下の例では、重い計算を含む条件が最初に評価されることを避けるために、軽い計算から評価しています。

boolean isAvailable = checkAvailability(); // 重い処理
int threshold = 10;

if (threshold > 5 || isAvailable) {
    System.out.println("条件を満たしました");
}

この例では、threshold > 5が真であれば、checkAvailability()は呼び出されず、計算リソースを節約できます。

短絡評価は、効率的なプログラミングを可能にし、不要な計算やエラーを避けるために活用できます。ただし、副作用のある条件式や評価順序に依存するロジックでは、注意して使用する必要があります。

if文とswitch文の違い

Javaでは、条件分岐を行う際に、if文だけでなく、switch文を使うこともできます。if文とswitch文は似た機能を持っていますが、用途やパフォーマンス、コードの可読性などにおいて違いがあります。本節では、これらの違いと使い分けのポイントについて詳しく説明します。

if文の特徴と適用例

if文は、条件式が真(true)かどうかをチェックし、その結果に応じて異なるコードブロックを実行するための構文です。if文の最大の特徴は、複雑な条件式を自由に書けることです。例えば、論理演算子を使って複数の条件を組み合わせたり、変数の値を直接比較したりできます。

int number = 15;

if (number > 10) {
    System.out.println("numberは10より大きいです");
} else if (number == 10) {
    System.out.println("numberは10です");
} else {
    System.out.println("numberは10より小さいです");
}

この例では、numberの値に応じて異なるメッセージが表示されます。if文は、複雑な条件を評価する際に非常に便利です。

switch文の特徴と適用例

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;
    default:
        System.out.println("無効な曜日です");
        break;
}

この例では、dayの値に応じて、対応する曜日が表示されます。switch文は、比較対象が特定の値リストである場合に、コードを簡潔に書くことができるため有用です。

if文とswitch文の違い

if文とswitch文の主な違いは以下の通りです。

1. 条件の複雑さ

if文は複雑な条件式をサポートします。論理演算子や比較演算子を使って、複数の条件を組み合わせることができます。一方、switch文では、比較対象は単一の変数に対する特定の値の一致であり、複雑な論理条件を扱うことはできません。

2. 対応するデータ型

switch文は、Javaのバージョンに応じて、intcharStringenumなど、限られたデータ型しか扱えません。if文は、boolean型の条件式を使うため、あらゆるデータ型や演算式を使用できます。

3. 可読性とメンテナンス性

switch文は、特定の値に基づく分岐が多い場合、if文よりもコードの可読性が高く、メンテナンスが容易です。逆に、if文は複雑な条件評価が必要な場合に有用で、複数の異なる条件を直感的に表現できます。

4. パフォーマンス

一部のケースでは、switch文の方がif-else構文よりもパフォーマンスが優れている場合があります。これは、switch文がコンパイル時にジャンプテーブルとして最適化されることがあるためです。ただし、これはケースによりますので、特定の状況でパフォーマンスを比較することが重要です。

使い分けのポイント

if文とswitch文の使い分けは、次の基準に基づいて行います。

  • 複雑な条件や複数の条件を評価する必要がある場合if文を使用します。
  • 特定の値リストに基づいて分岐する場合switch文が適しています。
  • コードの可読性を重視する場合switch文は、特にケースが多い場合に役立ちます。
  • データ型がintcharStringenumのいずれかであり、特定の値に対する処理が多い場合switch文を選ぶと良いでしょう。

条件に応じてif文とswitch文を適切に使い分けることで、より効率的で読みやすいコードを書くことができます。

よくあるエラーとデバッグ方法

Javaのif文を使用する際に発生しやすいエラーや問題について理解しておくことは、効率的なプログラム開発において非常に重要です。このセクションでは、if文に関連するよくあるエラーとそのデバッグ方法について説明します。

1. 条件式の誤り

条件式で使われる演算子や値が正しくないと、if文が期待通りに動作しないことがあります。特に、以下の点に注意が必要です。

比較演算子の間違い

===の混同は、Java初心者によく見られるミスです。==は比較演算子で、値が等しいかどうかをチェックしますが、=は代入演算子であり、値を変数に代入します。例えば、以下のコードは意図した動作をしません。

int a = 5;

if (a = 10) { // エラー: '='は代入のため、条件式が間違っている
    System.out.println("aは10です");
}

このコードはコンパイルエラーを引き起こします。正しくは==を使用する必要があります。

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

2. 条件式の型の不一致

if文の条件式では、真偽値(boolean)を返す式でなければなりません。しかし、別の型を条件式に使おうとすると、コンパイルエラーが発生します。

int x = 5;

if (x) { // エラー: 条件式が真偽値ではない
    System.out.println("xは5です");
}

このような場合、比較演算子を使って真偽値を得る必要があります。

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

3. ブロックの範囲の誤り

if文のコードブロックを定義する際、{}で囲むのを忘れると、意図しないコードが実行される可能性があります。特に、複数行のコードを条件付きで実行したい場合には注意が必要です。

int y = 10;

if (y > 5)
    System.out.println("yは5より大きい");
    System.out.println("このメッセージは常に表示されます");

この例では、if文に続くブロックが{}で囲まれていないため、2行目のSystem.out.printlnは常に実行されます。正しくは以下のようにブロックを囲む必要があります。

if (y > 5) {
    System.out.println("yは5より大きい");
    System.out.println("このメッセージは条件に依存します");
}

4. else ifチェーンの誤り

else ifを使った複数条件の分岐では、条件の順序やロジックに注意する必要があります。間違った順序でelse ifを記述すると、期待した動作が得られないことがあります。

int z = 7;

if (z > 10) {
    System.out.println("zは10より大きい");
} else if (z > 5) {
    System.out.println("zは5より大きいが、10以下です");
} else if (z > 1) {
    System.out.println("zは1より大きいが、5以下です");
}

この例では、zが7である場合、else ifの順序が正しいため、期待通りに「zは5より大きいが、10以下です」と表示されますが、条件式の順序が間違っていると、意図しない結果になることがあります。

5. デバッグ方法

if文に関連するエラーをデバッグするための一般的な方法としては、以下のようなアプローチがあります。

デバッグプリントを使う

条件式が意図通りに評価されているか確認するために、System.out.printlnを使って変数の値や条件の評価結果を出力します。

int a = 3;
System.out.println("aの値: " + a);

if (a > 5) {
    System.out.println("aは5より大きい");
} else {
    System.out.println("aは5以下です");
}

このように、条件式がどのように評価されているかを確認することで、問題の原因を特定しやすくなります。

デバッガを利用する

IDE(統合開発環境)に付属するデバッガを使って、if文の実行時の状態をステップ実行しながら確認します。ブレークポイントを設定し、変数の値や条件式の評価をリアルタイムでチェックすることで、複雑なバグを発見するのに役立ちます。

ユニットテストを導入する

if文を含むメソッドやクラスに対してユニットテストを作成することで、特定の条件下での動作が期待通りであるかを自動的に検証できます。これにより、条件式のエラーやロジックの誤りを早期に発見できます。

以上のようなエラーやデバッグ方法を把握しておくことで、if文を使用した際に発生しがちな問題を迅速に解決できるようになります。

演習問題

ここでは、if文の理解を深めるために、いくつかの演習問題を用意しました。これらの問題に取り組むことで、if文の基本的な使い方や複雑な条件式の書き方についてのスキルを確認できます。各問題を解いて、コードを実際に動かしてみてください。

演習問題1: 単純な条件分岐

次のプログラムでは、ユーザーから入力された整数が正の数か、負の数か、またはゼロかを判定します。以下のコードを完成させてください。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("整数を入力してください: ");
        int number = scanner.nextInt();

        // ここにif文を追加して、numberの値に応じてメッセージを表示してください。
        if (number > 0) {
            System.out.println("正の数です");
        } else if (number < 0) {
            System.out.println("負の数です");
        } else {
            System.out.println("ゼロです");
        }
    }
}

問題のポイント

  • 単純な条件分岐を使って、数値が正、負、ゼロのいずれかであるかを判定します。
  • if、else if、elseを使った基本的な条件分岐の構造を理解します。

演習問題2: 複数の条件を組み合わせる

次のプログラムでは、ユーザーの年齢を入力して、以下のようにメッセージを表示します。

  • 18歳未満の場合: 「未成年です」
  • 18歳以上で65歳未満の場合: 「成人です」
  • 65歳以上の場合: 「高齢者です」
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("年齢を入力してください: ");
        int age = scanner.nextInt();

        // ここにif文を追加して、年齢に応じたメッセージを表示してください。
        if (age < 18) {
            System.out.println("未成年です");
        } else if (age < 65) {
            System.out.println("成人です");
        } else {
            System.out.println("高齢者です");
        }
    }
}

問題のポイント

  • 複数の条件をelse ifを使って適切に分岐させます。
  • 年齢に応じたメッセージを正確に表示するための条件式を理解します。

演習問題3: 論理演算子を使用した条件分岐

次のプログラムでは、ユーザーのテストの得点に基づいて成績を判定します。得点は100点満点とし、次の条件で成績を判定してください。

  • 90点以上: 「A」
  • 80点以上90点未満: 「B」
  • 70点以上80点未満: 「C」
  • 60点以上70点未満: 「D」
  • 60点未満: 「F」
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("得点を入力してください: ");
        int score = scanner.nextInt();

        // ここにif文を追加して、得点に応じた成績を表示してください。
        if (score >= 90) {
            System.out.println("成績: A");
        } else if (score >= 80) {
            System.out.println("成績: B");
        } else if (score >= 70) {
            System.out.println("成績: C");
        } else if (score >= 60) {
            System.out.println("成績: D");
        } else {
            System.out.println("成績: F");
        }
    }
}

問題のポイント

  • 複数のelse if文を使って、得点に基づく成績を判定します。
  • 論理演算子を使用して、範囲内の値をチェックする条件式を作成します。

演習問題4: 複雑な条件式の構築

次のプログラムでは、ユーザーが購入する商品の価格と数量に基づいて割引を適用します。割引の条件は以下の通りです。

  • 購入価格が1000円以上かつ数量が10個以上の場合、10%割引
  • 購入価格が1000円以上だが数量が10個未満の場合、5%割引
  • その他の場合、割引なし
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("商品の価格を入力してください: ");
        int price = scanner.nextInt();
        System.out.print("商品の数量を入力してください: ");
        int quantity = scanner.nextInt();

        // ここにif文を追加して、割引後の価格を表示してください。
        double total = price * quantity;

        if (total >= 1000 && quantity >= 10) {
            total *= 0.9; // 10%割引
        } else if (total >= 1000) {
            total *= 0.95; // 5%割引
        }

        System.out.println("割引後の合計金額: " + total + "円");
    }
}

問題のポイント

  • 複数の条件を組み合わせて、割引条件を判定します。
  • 複雑な条件式を使って、効率的な判定ロジックを構築します。

これらの演習問題に取り組むことで、if文の使い方をより深く理解し、実践的なスキルを向上させることができます。解答を確認しながら、自分の理解を確かめてください。

まとめ

本記事では、Javaのif文の基本的な使い方から、複雑な条件式の構築方法、そしてelseelse ifの活用、ネストされたif文、論理演算子を用いた条件式の組み合わせ、短絡評価の仕組み、さらにはswitch文との違いについて詳しく解説しました。また、よくあるエラーとそのデバッグ方法を学び、演習問題を通じて実践的なスキルを強化することができました。if文は、プログラムの流れを制御するための基本的な構文であり、その適切な使用がプログラムの正確性と効率性を高める鍵となります。今後もif文を活用して、さまざまな条件分岐を柔軟に実装していきましょう。

コメント

コメントする

目次