ITエンジニアのプレイングマネージャー化応援サイト

4.条件分岐と判定条件

この記事では、当社 の新人エンジニア研修の参考にJava8を解説します。

前回は演算子について解説しました。

今回は条件分岐と判定条件について解説します。

あわせて、前回の演算子の続きで、

・比較演算子
・条件演算子
・三項演算子

についても触れていきます。

1.if文

条件に応じて処理をさせたり、させなかったりといったプログラムが作成できます。

例えば、「もしも、20歳以上なら酒を飲む」といった処理です。

if(20歳以上){

 酒を飲む;

}

一般化すると以下のように書けるでしょう。

if(条件式){

 命令文;

}

上記の命令文は条件がtrueの場合に実行されます。

条件式はboolean型の値、つまり true または false という値を持つものであればなんでもOKです。

 Javaで書くと以下のようになります。

このブログラムを実行すると条件式の値はtrueのため標準出力には「酒を飲む」と出力されます。

条件式の値がfalseの場合(例えば、age = 19)は何も出力されません。

この時の、「>=」記号を比較演算子と呼びます。

 

2.比較演算子

ここで、Javaの判定条件を構成する比較演算子をまとめましょう。

比較演算子 説明 式の例 結果(値)
== 左辺と右辺が等しい 1 == 2 false
!= 左辺と右辺が等しくない 1 != 2 true
> 左辺が右辺より大きい 1 > 2 false
< 左辺が右辺より小さい 1 < 2 true
>= 左辺が右辺以上である 1 >= 2 false
<= 左辺が右辺以下である 1 <= 2 true

前回解説したように=が一つは代入の意味でした。

そのためJavaで等しいを表現するには「==」と=を2つ重ねます。

ここも間違いやすいところです。

また、「より大きい(超過)」と「以上」、「より小さい(未満)」と「以下」も厳密に使い分ける必要があります。 

 

なお、 命令文が1つだけの場合は{}を省略することも可能です。

以下のプログラムは上記プログラムと同じ結果になります。

<結果>

酒を飲む

 

ただし、うっかりすると以下のように条件に応じた処理の範囲を間違えることもあります。

成人して酒も煙草もやれるつもりで以下のように書くと意図しない結果になります。

<結果>

煙草も吸う

したがって、ご自身で書くときは一文の処理であっても{}で囲むことを心掛けましょう。

※IDEのフォーマットをかけてもそうなることが多いと思います。

そして、{}で囲んでいない他人の書いたコードを読むときの留意事項として気を付けてください。

 

3.if else文

例えば、「もしも、20歳以上なら酒を飲む、そうでなければジュースを飲む」といった表示をさせたい場合はどうすればいいでしょうか?

if else文が使えます

if(20歳以上){

 酒を飲む;

} else {

 ジュースを飲む;

}

 Javaで書くと以下のようになります。

<結果>

ジュースを飲む

このブログラムを実行すると条件式の値はfalseのため標準出力には「ジュースを飲む」と出力されます。

では、さらに細かく条件ごとの処理に分岐させたい場合はどうしたらよいでしょうか?

以下のように  if~else文を連結することができます。

点数(score)によってS,A,B,Cの4段階評価を行います。

<結果>

A

ただし、条件が多くなると記述が複雑になってしまうのがif else文の欠点です。

そんな時には次のswitch文の利用を検討してみましょう。

 

4.switch文

switch文はアルゴリズムでいう多岐分岐を扱う文です。

文法は以下の通りです。

switch (式) {

   case 値A: // 式の値が値Aだったときの処理 break;

   case 値B: // 式の値が値Bだったときの処理 break;

   default: // 式の値がいずれのcaseの値とも一致しなかったときの処理

}

switch文の値で使える型は、char、byte、short、int、String、enum(後述)があります。

default句は値がどのcaseの値とも一致しなかった場合の処理を記述するためにあります。

<結果>

B

なお、break句が使用されない場合、一致するケースの後のすべてのswitch文が終わりまで順番に実行され意図しない結果になることがあります。

<結果>

B
A
D

フォールスルー(fall through)といいバグの温床になり得ます。

あえてフォールスルーさせるとき以外は、気をつけてください。

 

5.3項演算子

ここでは、少し応用的なテーマとして3項演算子を紹介します。

3項演算子を使うと一文で簡潔に分岐構造を表現できます。

3項演算子の基本構文は以下の通りです。

条件式 ? 値1 : 値2

条件式がtrueの場合に、式全体の値が値1に、falseの場合には値2になります。

値の位置に処理が書けるわけではありませんので気をつけましょう。

具体例で見てみましょう。

<結果>

Yes

ただし、3項演算子を多用することには可読性を低くするという批判もあります。

複雑な入れ子構造を使用したりはしないようにしましょう。

 

6.論理演算子

論理演算子を使うと複雑な条件式を組み合わせることができます。

例えば、学生の成績を付けるプログラムを考えます。

英語(English)と数学(Math)それぞれ100点満点のテストで評価はS,A,B,Cの4段階評価とします。

英語と数学の両方が80点以上だったらS評価。

どちらか一方が80点以上だったらA評価。

どちらか一方が70点以上だったらB評価。

それ以外はC評価とします。

<結果>

A

論理演算子なしで同じコードを書こうとしたら大変です。

ここでは、論理演算子をまとめてみました。

演算子 呼び方 式がtrueになる条件 使用例
&& 論理積 かつ AND 左辺と右辺の両方がtrue gender == ‘F’ && age >= 16
|| 論理和 または OR すくなくとも左辺と右辺のどちらかがtrue gender == ‘F’ || age >= 16
^ 排他的論理和 XOR 左辺と右辺のどちらかがtrueで他方がfalse gender == ‘F’ ^ age >= 16
! 否定 NOT 条件式がfalse !(gender == ‘F’ )

演算子がいくつか出てきたところでその優先順位についてまとめます。

算術演算子 > 関係演算子 > 論理演算子

の順に優先されます。

まず、算術演算子は関係演算子より優先されます。

例えば、

a + 1 > b -10

という式は以下のように解釈されます。

(a + 1) > (b -10)

※()内が優先される

また、関係演算子は論理演算子より優先されます。

gender == ‘F’ && age >= 16

という式は以下のように解釈されます。

(gender == ‘F’) && (age >= 16)

 

また、論理積は論理和よりも優先されますが、カッコを使うことで論理和を優先させることができるということは、今までの類推で理解可能だと思います。

a > 10 && b < 5 || c == 0

a > 10 && (b < 5 || c == 0)

 

ここまで理解できたら、まとめとして演習問題にチャレンジしましょう。

問題2.条件分岐

今回はJavaの条件分岐と判定条件について見てきました。

次回は、繰り返し処理を学んでコンピューターのパワーを実感しましょう。

 

JavaSE8の解説に戻る

新入社員研修ポータル

IT企業の人財育成に関することなら全てお任せ下さい TEL 0120-559-463 受付時間 10:00 - 17:00 (土・日・祝日除く)

ZOOMを使った遠隔研修メニュー(PDFが開きます)

ZOOMを使った遠隔研修

新人エンジニアのためのJavaタイピングゲーム

新人プログラマのためのプログラミング動画

YouTubeチャンネル

お問い合わせはこちらから

    お名前 (必須)

    メールアドレス (必須)

    題名(件名)

    メッセージ本文

    確認画面は表示されません。上記内容にて送信しますので、よろしければチェックを入れてください。

    新入社員研修ポータル

    PAGETOP
    Copyright © Say Consulting Group, Inc. All Rights Reserved.