Javaのif文の書き方とは?条件分岐の基本をやさしく解説
生徒
「Javaで条件によって処理を変える方法ってありますか?」
先生
「はい、Javaではif文を使って条件分岐を行うことができます。これはプログラミングの基本中の基本ですよ。」
生徒
「条件分岐って何ですか?」
先生
「例えば、点数が60点以上なら合格、未満なら不合格というように、条件によって異なる処理を実行することです。それでは、if文の使い方を詳しく見ていきましょう!」
1. if文とは何か
Javaのif文は、条件分岐を実現するための制御構文です。プログラムを書いていると、特定の条件が成立したときだけ処理を実行したい場面が頻繁に出てきます。if文を使うことで、条件がtrueの場合のみ特定のコードブロックを実行できます。
if文は日常生活でも使う思考パターンと同じです。「もし雨が降っていたら傘を持って行く」というような判断をプログラムで表現するのがif文なのです。条件式の結果がtrueかfalseかによって、実行される処理が変わります。
2. 基本的なif文の書き方
Javaでif文を書く基本的な構文は次のようになります。まずifというキーワードを書き、その後に丸括弧で条件式を囲みます。そして波括弧の中に条件が真のときに実行したい処理を記述します。
以下は、点数が60点以上かどうかを判定する簡単なサンプルコードです。変数scoreに格納された値が60以上であれば、合格のメッセージが表示されます。
public class IfBasicExample {
public static void main(String[] args) {
int score = 75;
if (score >= 60) {
System.out.println("合格です!");
}
}
}
このプログラムを実行すると、次のような結果が出力されます。
合格です!
条件式の部分には比較演算子を使います。ここでは「以上」を表す>=を使っていますが、他にも>(より大きい)、<(より小さい)、<=(以下)、==(等しい)、!=(等しくない)などがあります。
3. if-else文で条件に応じた処理を分ける
if文だけでは条件が真のときの処理しか書けませんが、else文を組み合わせることで、条件が偽のときの処理も記述できます。これをif-else文と呼びます。
if-else文を使えば、合格と不合格の両方のメッセージを表示することができます。条件式が真ならifブロックが実行され、偽ならelseブロックが実行されます。
public class IfElseExample {
public static void main(String[] args) {
int score = 45;
if (score >= 60) {
System.out.println("合格です!おめでとうございます。");
} else {
System.out.println("不合格です。もう一度挑戦しましょう。");
}
}
}
このプログラムの実行結果は次のようになります。scoreが45なので、条件式が偽となりelseブロックが実行されます。
不合格です。もう一度挑戦しましょう。
if-else文を使うことで、二択の判断を簡潔に記述できます。どちらか一方の処理が必ず実行されるという点が重要です。
4. else if文で複数の条件を判定する
二択だけでなく、三択以上の条件分岐が必要な場合もあります。そのようなときはelse ifを使います。else if文を使うことで、複数の条件を順番にチェックして、最初に真となった条件のブロックだけが実行されます。
例えば、点数によって評価を変える場合を考えてみましょう。80点以上なら優、60点以上なら良、それ未満なら不可というように段階的に判定できます。
public class ElseIfExample {
public static void main(String[] args) {
int score = 72;
if (score >= 80) {
System.out.println("評価:優");
} else if (score >= 60) {
System.out.println("評価:良");
} else {
System.out.println("評価:不可");
}
}
}
このプログラムでは、scoreが72なので、最初の条件は偽、二番目の条件が真となり、次の結果が表示されます。
評価:良
else if文は何個でも続けて書くことができます。ただし、上から順番に判定されるため、条件の順序には注意が必要です。より厳しい条件を先に書くのが一般的です。
5. 論理演算子を使った複雑な条件式
実際のプログラムでは、単純な条件だけでなく、複数の条件を組み合わせたい場合があります。そのようなときに論理演算子を使います。Javaには主に三つの論理演算子があります。
AND演算子&&は両方の条件が真のときに真を返します。OR演算子||はどちらか一方でも真なら真を返します。NOT演算子!は条件の真偽を反転させます。これらを組み合わせることで、より複雑な判定が可能になります。
例えば、年齢が18歳以上かつ運転免許を持っている場合に運転可能と判定するプログラムを考えてみましょう。
public class LogicalOperatorExample {
public static void main(String[] args) {
int age = 20;
boolean hasLicense = true;
if (age >= 18 && hasLicense) {
System.out.println("運転できます。");
} else {
System.out.println("運転できません。");
}
}
}
この例では、年齢が18歳以上でありかつ免許を持っている場合のみ、運転可能と判定されます。どちらか一方でも条件を満たさない場合は運転できないと表示されます。
論理演算子を使うことで、一つのif文の中で複数の条件をチェックできるため、コードがシンプルになります。ただし、条件が複雑になりすぎると可読性が下がるので、適度に分割することも大切です。
6. ネストしたif文の使い方
if文の中に別のif文を入れることもできます。これをネスト(入れ子)構造と呼びます。複雑な条件判定が必要な場合に、段階的にチェックを行うことができます。
ただし、ネストが深くなりすぎるとコードが読みにくくなるため、できるだけ論理演算子を使って一つの条件式にまとめるか、メソッドに分割することが推奨されます。
例として、会員種別と購入金額によって割引率を決定するプログラムを見てみましょう。まず会員かどうかをチェックし、その中でさらに購入金額によって処理を分けます。
public class NestedIfExample {
public static void main(String[] args) {
boolean isMember = true;
int purchaseAmount = 15000;
double discount = 0;
if (isMember) {
if (purchaseAmount >= 10000) {
discount = 0.2;
} else {
discount = 0.1;
}
} else {
discount = 0;
}
System.out.println("割引率:" + (discount * 100) + "%");
}
}
このプログラムでは、会員であり購入金額が10000円以上なので、20パーセントの割引が適用されます。ネストしたif文を使うことで、段階的な判定を明確に表現できます。
7. if文の波括弧を省略できる場合
if文では、実行する文が一つだけの場合に限り、波括弧を省略することができます。しかし、初心者のうちは可読性やメンテナンス性の観点から、常に波括弧を書くことをお勧めします。
波括弧を省略すると、ifの直後の一文だけが条件の対象となります。後から処理を追加したときに、波括弧がないと意図しない動作になることがあるため、注意が必要です。
チーム開発では、コーディング規約で波括弧の省略を禁止している場合も多くあります。統一されたスタイルでコードを書くことが、バグを減らし保守性を高めることにつながります。
8. if文とswitch文の使い分け
条件分岐にはif文以外にswitch文という構文もあります。switch文は特定の変数の値によって処理を分岐させる場合に便利です。しかし、複雑な条件式を書くことはできません。
if文は柔軟な条件式を書けるのが利点です。比較演算子や論理演算子を自由に使えるため、あらゆる条件判定に対応できます。一方、switch文は値の一致判定に特化しているため、コードがすっきりする場面もあります。
一般的には、範囲判定や複雑な条件が必要な場合はif文を使い、複数の定数値による分岐の場合はswitch文を検討するとよいでしょう。どちらを使うかは状況に応じて判断します。
9. if文でよくある間違いと注意点
初心者がif文を使う際によくある間違いの一つが、等価比較で代入演算子=を使ってしまうことです。Javaでは等価比較には必ず==を使う必要があります。一つのイコールは代入を意味するため、条件式では使えません。
また、浮動小数点数の比較には注意が必要です。計算誤差により、見た目は同じ値でも完全に一致しないことがあります。そのような場合は、差の絶対値が十分小さいかどうかで判定する方法が推奨されます。
さらに、文字列の比較では==ではなくequalsメソッドを使う必要があります。これはJavaが文字列をオブジェクトとして扱うためです。==は参照の比較となり、内容が同じでも異なるオブジェクトだと偽になってしまいます。
条件式の中で変数の値を変更することも避けるべきです。条件判定と値の変更を同時に行うと、コードの意図が分かりにくくなり、予期しないバグの原因となります。条件式は純粋に判定だけを行うようにしましょう。
10. if文を使った実践的なプログラム例
最後に、if文を使った実践的なプログラム例を見てみましょう。ここでは、ユーザーの入力に応じて異なる処理を行う簡単な判定プログラムを作成します。
このプログラムでは、気温に応じて服装のアドバイスを表示します。複数の条件分岐を組み合わせることで、実用的な判定ロジックを実装できます。
public class TemperatureAdvice {
public static void main(String[] args) {
int temperature = 18;
boolean isRaining = false;
System.out.println("現在の気温:" + temperature + "度");
if (temperature >= 25) {
System.out.println("暑いです。半袖で過ごしましょう。");
} else if (temperature >= 15) {
System.out.println("過ごしやすい気温です。長袖シャツがおすすめです。");
} else if (temperature >= 5) {
System.out.println("少し寒いです。上着を持って行きましょう。");
} else {
System.out.println("とても寒いです。コートが必要です。");
}
if (isRaining) {
System.out.println("雨が降っています。傘を忘れずに!");
}
}
}
このプログラムは気温が18度で雨が降っていない状況を想定しています。実行すると次のような出力が得られます。
現在の気温:18度
過ごしやすい気温です。長袖シャツがおすすめです。
このように、if文を使うことで条件に応じた柔軟な処理が実現できます。日常的な判断をプログラムで表現する力は、あらゆるアプリケーション開発の基礎となります。
if文をマスターすることで、ユーザーの入力に応じて動作を変えたり、データの状態によって処理を切り替えたりできるようになります。まずは簡単な条件分岐から始めて、徐々に複雑な判定ロジックにも挑戦してみてください。