Java超|条件と場合に応じた処理

条件を読めば、Javaの処理は一本道から「判断して動くバトルルート」へ進化する。

Javaのプログラムは、基本的には上から下へ順番に処理が進みます。
これは、修行場で決められたメニューを順番にこなしていくようなものです。

たとえば、

  1. 体力を確認する
  2. 技を出す
  3. 結果を表示する

というように、書かれた順番どおりに処理が進みます。

しかし、実際のプログラムでは、いつも同じ道を進めばよいわけではありません。

たとえば、戦士の体力が十分に残っているなら攻撃する。
体力が少ないなら防御する。
戦闘力が一定以上なら必殺技を使う。
選ばれた作戦番号によって、進むルートを変える。

このように、状況に応じて処理を変えるために使うのが条件です。

ドラゴンボールの世界観でたとえるなら、条件はバトル中に次の行動を決めるための判断基準です。

状況判断行動
体力が80以上まだ攻められる攻撃を続ける
体力が30以下危険な状態防御や回復を優先する
戦闘力が高い必殺技を使える大技を放つ
敵との距離が近い接近戦が有効近距離攻撃をする

Javaでも考え方は同じです。
条件が成り立つならこちらの処理、成り立たないなら別の処理、というようにプログラムの流れを分けます。

条件を理解すると、Javaのプログラムはただ順番に動くだけではなく、状況を判断して動くプログラムへ変わります。
この記事では、条件とは何か、true と false の考え方、関係演算子、変数を使った条件、= と == の違いを、ドラゴンボール風の世界観に置き換えながら整理します。

条件とは何か

条件とは、ある状況を判断するための基準です。

日常生活でも、私たちは条件を使って行動を変えています。

状況判断行動
テストの点数が高いよくできたごほうびを買う
テストの点数が低い復習が必要勉強時間を増やす
雨が降っている傘が必要傘を持って出かける
体力が残っているまだ動ける修行を続ける

Javaでも同じように、条件を使うことで処理の流れを変えられます。

たとえば、戦士の体力を hp、戦闘力を power、作戦番号を missionNo として考えると、次のような判断ができます。

判断したいこと条件のイメージ
体力が80以上かまだ攻撃できるか
体力が30以下か防御に切り替えるべきか
戦闘力が9000以上か必殺技を使えるか
作戦番号が1か第一作戦を実行するか

ドラゴンボール風にたとえると、条件は戦士がバトル中に使う判断スカウターです。

スカウターで相手の戦闘力や自分の残り体力を確認し、その結果によって次の行動を変える。
この判断のしくみが、Javaの条件処理につながります。

Javaにおける条件は true または false になる式

Javaでは、条件はただの文章ではなく、式として書きます。

そして、条件を表す式は、評価されると必ず true または false のどちらかになります。

値意味
true条件が成り立っている
false条件が成り立っていない

たとえば、点数が80点以上であるという条件を考えます。

点数条件:80点以上評価結果
90成り立つtrue
80成り立つtrue
79成り立たないfalse
50成り立たないfalse

ここで大切なのは、Javaの条件はあいまいに判断されないという点です。

成り立つなら true。
成り立たないなら false。

この2つだけです。

数値計算の式は、評価されると数値になります。

1 + 2

これは評価されると 3 になります。

一方、条件を表す式は、評価されると true または false になります。

4 > 2

これは、4 が 2 より大きいので true になります。

つまり、Javaにおける条件とは、評価結果が true または false になる式です。

ドラゴンボール風に言えば、条件式はスカウターの判定画面です。
戦闘力の比較や体力の確認を行い、結果として 出撃可能 true または 危険 false のように判断を返します。

条件をJavaの式で表す

Javaでは、大小関係や等しいかどうかを調べることで条件を作れます。

たとえば、次の式を見てください。

4 > 2

これは、4 は 2 より大きいという意味です。
この条件は正しいので、評価結果は true です。

一方で、次の式はどうでしょうか。

4 < 2

これは、4 は 2 より小さいという意味です。
しかし、実際には4は2より小さくありません。
そのため、評価結果は false になります。

条件式評価結果意味
4 > 2true4 は 2 より大きい
4 < 2false4 は 2 より小さくない
6 == 6true6 と 6 は等しい
6 != 9true6 と 9 は等しくない

このように、Javaでは条件式を使って、成り立つかどうかを判断します。

ドラゴンボール風にたとえると、条件式はバトル判断用のスカウター判定です。
相手の戦闘力が自分より高いか、体力が残っているか、作戦番号が一致しているかを調べます。
その結果は必ず true か false になります。

図:条件式は true または false になる

この図が示していること

この図は、条件式が評価されると true または false になることを示しています。

左側の 4 > 2 は、4 が 2 より大きいので true になります。
右側の 4 < 2 は、4 が 2 より小さいという条件が成り立たないので false になります。

ここから分かるのは、条件式はただの記号の並びではなく、プログラムの中で判断結果を持つ式だということです。

関係演算子とは何か

条件を作るときに使う > や <、== などの記号を、関係演算子といいます。

関係演算子は、左辺と右辺の関係を調べるための演算子です。
そして、調べた結果を true または false で返します。

演算子式が true になる場合
==左辺と右辺が等しい
!=左辺と右辺が等しくない
>左辺が右辺より大きい
>=左辺が右辺以上である
<左辺が右辺より小さい
<=左辺が右辺以下である

関係演算子は、条件を作るための基本の道具です。

ドラゴンボール風にたとえるなら、関係演算子は戦況を見極める判定技です。

Javaの関係演算子バトルでのイメージ
==作戦番号が一致しているか確認する
!=違う作戦番号か確認する
>自分の戦闘力が相手より高いか確認する
>=必殺技を使える基準に達しているか確認する
<体力が危険ラインより低いか確認する
<=残り時間や体力が限界以下か確認する

関係演算子を使えるようになると、プログラムの中で細かい判断ができるようになります。

== は等しいかどうかを調べる

== は、左辺と右辺が等しいかどうかを調べる演算子です。

6 == 6

これは true です。
左辺と右辺が同じ値だからです。

6 == 9

これは false です。
6 と 9 は同じ値ではないからです。

条件式評価結果理由
6 == 6true同じ値
6 == 9false同じ値ではない

== は、条件式の中でとてもよく使います。
たとえば、作戦番号が1かどうか、選択されたメニュー番号が2かどうか、入力された答えが正しいかどうかを判定するときに使います。

ドラゴンボール風にたとえると、== は作戦カードの番号が指定された番号と一致しているか確認する判定です。

missionNo == 1

これは、missionNo が 1 と等しいかを調べています。
missionNo が 1 なら true、それ以外なら false です。

!= は等しくないかどうかを調べる

!= は、左辺と右辺が等しくないときに true になります。

6 != 9

これは true です。
6 と 9 は異なる値だからです。

6 != 6

これは false です。
6 と 6 は同じ値なので、等しくないとは言えません。

条件式評価結果理由
6 != 9true異なる値
6 != 6false同じ値

!= は、指定した値ではない場合を判定するときによく使います。

たとえば、選ばれた作戦番号が 1 ではない場合を調べるなら、次のように考えます。

missionNo != 1

ドラゴンボール風に言えば、!= はこの作戦カードは指定された作戦ではないと確認する判定です。

> は左辺が右辺より大きいかを調べる

> は、左辺が右辺より大きいときに true になります。

8 > 3

これは true です。

2 > 7

これは false です。

条件式評価結果理由
8 > 3true8 は 3 より大きい
2 > 7false2 は 7 より大きくない

> は、基準より大きいかを調べたいときに使います。

たとえば、戦闘力 power が 9000 より大きいかを調べるなら、次のような条件になります。

power > 9000

この条件は、power が 9000 を超えているときに true になります。

注意したいのは、> は等しい場合を含まないことです。
power が 9000 ちょうどなら、power > 9000 は false です。

>= は左辺が右辺以上かを調べる

>= は、左辺が右辺より大きい場合、または等しい場合に true になります。

8 >= 8

これは true です。
等しい場合も含むからです。

10 >= 8

これも true です。
10 は 8 より大きいからです。

5 >= 9

これは false です。

条件式評価結果理由
8 >= 8true8 以上なので等しい場合も含む
10 >= 8true10 は 8 より大きい
5 >= 9false5 は 9 以上ではない

>= は、80点以上、20歳以上、残り数が1以上、体力が50以上のような条件でよく使います。

ドラゴンボール風にたとえると、power >= 9000 は、戦闘力が9000以上なら強化技を使えるという判定です。

> と >= は似ていますが、等しい場合を含むかどうかが違います。

条件式9000 のとき9001 のとき
power > 9000falsetrue
power >= 9000truetrue

9000ちょうどを含めたいなら >= を使います。
9000を超えた場合だけにしたいなら > を使います。

< は左辺が右辺より小さいかを調べる

< は、左辺が右辺より小さいときに true になります。

2 < 5

これは true です。

9 < 1

これは false です。

条件式評価結果理由
2 < 5true2 は 5 より小さい
9 < 1false9 は 1 より小さくない

< は、基準より小さいかを調べるときに使います。

たとえば、体力 hp が 30 より小さいかを調べるなら、次のように考えます。

hp < 30

これは、hp が 30 未満のときに true になります。

ドラゴンボール風にたとえると、hp < 30 は、戦士の体力が危険ラインを下回ったかどうかを調べる判定です。

<= は左辺が右辺以下かを調べる

<= は、左辺が右辺より小さい場合、または等しい場合に true になります。

4 <= 4

これは true です。
等しい場合も含みます。

2 <= 9

これも true です。

9 <= 4

これは false です。

条件式評価結果理由
4 <= 4true4 以下なので等しい場合も含む
2 <= 9true2 は 9 より小さい
9 <= 4false9 は 4 以下ではない

<= は、100以下、残り時間が0以下、体力が30以下のような条件でよく使います。

たとえば、hp <= 0 は、体力が0以下かどうかを調べる条件です。
ゲームやバトル系の処理では、戦闘不能かどうかを判断する条件としてイメージしやすいです。

hp <= 0

この条件は、hp が 0 またはマイナスのときに true になります。

関係演算子を使った条件の例

関係演算子を使うと、さまざまな条件を作れます。

条件式結果の考え方
5 > 35 は 3 より大きいので true
5 < 35 は 3 より小さくないので false
a == 6a が 6 なら true、それ以外なら false
a != 6a が 6 でなければ true、6 なら false
score >= 80score が 80 以上なら true
age < 20age が 20 未満なら true
hp <= 30hp が 30 以下なら true
power > 9000power が 9000 より大きければ true

固定された数値どうしの比較なら、結果はすぐに分かります。

5 > 3

これは常に true です。

しかし、変数を使った条件は、その時点で変数に入っている値によって結果が変わります。

a == 6

この条件は、a の中身によって true にも false にもなります。

ここが、条件式の大切なポイントです。
変数を使うことで、プログラムはそのときの状況に応じた判断ができるようになります。

変数を使った条件

実際のプログラムでは、条件の中に変数を使うことがとても多いです。

なぜなら、プログラムは固定された数値だけでなく、入力された値や計算結果に応じて動くからです。

たとえば、次の条件を考えます。

a == 6

これは、a の値が 6 と等しいかどうかを調べる条件です。

a の値a == 6a != 6
6truefalse
3falsetrue
10falsetrue

a が 6 なら、a == 6 は true になります。
a が 3 や 10 なら、a == 6 は false になります。

逆に、a != 6 は、a が 6 ではないときに true になります。

このように、変数を含む条件は、変数の値によって結果が変わります。

ドラゴンボール風にたとえると、a は現在の作戦番号や戦士の残り体力のようなものです。
その値が変われば、進む道も変わります。

たとえば、missionNo が 1 なら第一作戦、2 なら第二作戦、というように、変数の値によって処理を切り替える準備ができます。

図:変数を使った条件は値によって結果が変わる

この図が示していること

この図は、a == 6 という同じ条件式でも、a の値によって結果が変わることを示しています。

左側では、a の値が 6 です。
そのため、a == 6 は true になります。

右側では、a の値が 3 です。
そのため、a == 6 は false になります。

ここから分かるのは、変数を使った条件は、いつも同じ結果になるわけではないということです。
その時点で変数に入っている値によって、判断結果が変わります。

= と == の違いに注意する

条件を学ぶときに、特に間違えやすいのが = と == の違いです。

この2つは見た目が似ていますが、役割はまったく違います。

演算子名前役割
=代入演算子右辺の値を左辺の変数に入れる
==関係演算子左辺と右辺が等しいかどうかを調べる

たとえば、次の式は代入です。

a = 6

これは、a に 6 を入れるという意味です。

一方で、次の式は比較です。

a == 6

これは、a が 6 と等しいかどうかを調べるという意味です。

書き方意味
a = 6a に 6 を代入する
a == 6a が 6 と等しいか調べる

条件式の中で等しいかどうかを調べたいときは、== を使います。
= ではありません。

ドラゴンボール風にたとえると、= は作戦カードに番号を書き込む動きです。
一方、== は作戦カードの番号が指定番号と一致するか確認する動きです。

書き方バトルでのイメージ
missionNo = 1作戦カードに 1 を書き込む
missionNo == 1作戦カードが 1 か確認する

書き込むことと確認することは、まったく違う動きです。
この違いをしっかり分けて考えることが大切です。

!= や == は2文字で1つの演算子

!= や == は、2文字で1つの演算子です。

そのため、途中に空白を入れてはいけません。

正しくない書き方は次のような形です。

a == 6

a = = 6

正しくは、次のように続けて書きます。

a != 6

a == 6
書き方正しいか理由
a != 6正しい!= が1つの演算子
a == 6正しい== が1つの演算子
a ! = 6誤り! と = が分かれている
a = = 6誤り= と = が分かれている

小さな違いに見えますが、Javaではとても重要です。

関係演算子は、記号全体で1つの意味を持ちます。
そのため、途中で分けずに書くことを意識しましょう。

条件式を日本語で読めるようにする

条件を学ぶときは、演算子を暗記するだけではなく、その条件が何を意味しているのかを日本語で読めるようになることが大切です。

条件式日本語での意味
score >= 80score が 80 以上である
age < 20age が 20 未満である
num == 0num が 0 と等しい
answer != 1answer が 1 ではない
hp <= 30hp が 30 以下である
level > 5level が 5 より大きい
power >= 9000power が 9000 以上である
missionNo == 1missionNo が 1 と等しい

このように読めるようになると、if文や switch文を学ぶときに理解しやすくなります。

大切なのは、この条件はどんなときに true になるのかを考えることです。

たとえば、次の条件を見たとします。

score >= 80

これは、score が 80 以上なら true になる、と読みます。

次の条件ならどうでしょうか。

answer != 1

これは、answer が 1 ではないなら true になる、と読みます。

ドラゴンボール風に言えば、条件式を読むことは、スカウターの表示を正しく読み取ることです。
表示の意味を読み違えると、攻撃すべき場面で防御したり、防御すべき場面で突撃したりしてしまいます。

Javaでも同じで、条件式の読み間違いは処理の流れのミスにつながります。

条件は場合に応じた処理の土台になる

Javaで場合に応じた処理を行うには、まず条件を作れる必要があります。

条件が作れるようになると、次のような判断ができるようになります。

条件true のときの処理イメージ
score >= 80合格と表示する
age < 20未成年向けの処理を行う
hp <= 0戦闘不能として扱う
answer == 1選択肢1の処理へ進む
password != 1234エラーメッセージを表示する
power >= 9000必殺技を使う
missionNo == 2第二作戦へ進む

このように、条件はプログラムの分かれ道を作るための材料です。

この先で学ぶ if文 や if~else文 では、条件が true か false かによって、実行する処理を切り替えます。

条件の結果処理の流れ
true条件が成り立つ場合の処理へ進む
false条件が成り立たない場合の処理へ進む

つまり、条件を理解しておくことは、条件判断文を理解するための土台です。

ドラゴンボール風にたとえると、条件は分かれ道の前で使う判断スカウターです。

スカウターの結果が true なら攻撃ルートへ進む。
false なら防御ルートや別作戦へ進む。

このように、条件によってプログラムの流れが変わります。

図:条件は処理の分かれ道を作る

この図が示していること

この図は、条件の結果によって次に進む処理が変わることを示しています。

中央の hp <= 0 は、体力が0以下かどうかを調べる条件です。
この条件が true なら、戦闘不能処理へ進みます。
false なら、まだ体力が残っているのでバトルを続行します。

ここから分かるのは、条件はプログラムの流れを分けるための判断ポイントだということです。

これから学ぶ条件判断文とのつながり

条件は、それだけで終わるものではありません。
この先で学ぶ条件判断文と組み合わせることで、本格的に処理を分けられるようになります。

学ぶ内容役割
if文条件が true のときだけ処理を実行する
if~else文true のときと false のときで処理を分ける
if~else if~else複数の条件を順番に調べる
switch文値によって処理を分ける
論理演算子複数の条件を組み合わせる

そのすべての入口になるのが、条件式です。

条件式が true になるのか、false になるのか。
ここを判断できるようになると、if文や switch文の意味がかなり分かりやすくなります。

ドラゴンボール風に言えば、条件式は作戦を決めるためのスカウター判定です。
if文や switch文は、その判定結果をもとに実際の行動ルートを選ぶ司令システムです。

Javaの考え方ドラゴンボール風のイメージ
条件式スカウターで状況を判定する
true条件が成り立ち、作戦を実行できる
false条件が成り立たず、別の作戦を選ぶ
if文判定が true のときだけ行動する
if~else文true と false で別行動に分かれる
switch文作戦番号によって行動を切り替える

条件を学ぶときに意識したいこと

条件を学ぶときは、次のポイントを意識すると理解しやすくなります。

ポイント内容
条件は式であるJavaでは条件を式として書く
条件の結果は2つだけtrue または false になる
関係演算子を使う>、<、==、!= などで比較する
変数を使える変数の値によって結果が変わる
= と == は違う代入と比較を区別する
2文字の演算子は分けない== や != は続けて書く
true になる条件を読むどんなときに成り立つかを考える

Javaの条件は、プログラムに判断力を持たせるための入口です。

これまでのプログラムが上から下へ進む一本道だったとすると、条件を使ったプログラムは分かれ道のある道になります。

条件が true ならこちらへ進む。
false なら別の道へ進む。

この考え方が身につくと、Javaで作れる処理の幅が一気に広がります。