
【改訂版】Eclipseではじめるプログラミング(3)
プログラミングの醍醐味! Javaで“条件式”を理解する
株式会社ガリレオ
小山博史
2009/2/25
複雑な条件分岐もできる「if-then-else文」
次に、条件が成立するときと成立しないときとで処理を分けたい場合のプログラミング方法について解説します。この場合は、もう1つのif文であるif-then-else文を使います。if-then-else文は次のように記述します。条件が成立するときは文1が実行され、成立しないときは文2が実行されます。
if (条件式) 文1 else 文2 |
これも直感的に処理の流れを理解できるように図で表してみると、図2のようになります。図では、前処理の後に条件式の判定をして、条件式が真の場合は処理1を実行してから処理3を実行しますが、条件式が偽の場合は処理2を実行してから処理3を実行するという処理の流れを示しています。このうち赤線で囲んだ部分がif-then-else文と対応することになります。
![]() |
| 図2 if-then-else文 |
ここで、if文自体も文なので、次のように文2としてif-then文やif-then-else文を記述することもできます。このようにすることで、複数の条件を設定して処理の流れを細かく制御することも可能になります。
if (条件式1) 文1 else if (条件式2) 文2 |
■ コードのインデントもEclipseなら簡単!
if文を1行で記述すると処理の流れが分かりにくいので、普通は段落(インデント)を付けます。どのようにするかというのは実際に見た方が早いでしょう。下記のように文を字下げするのです。
if (条件式1) |
この字下げを簡単にする方法があります。Eclipseのソースコードフォーマット機能を活用すればよいのです。この機能を利用するときの具体的な手順はサンプルプログラムを作成するときに一緒に説明します。このようにインデントを付けることにより、各条件式によってどのように処理が分岐されているかが分かりやすくなります。
関係演算子と等値演算子って何?
if-then-else文のサンプルに入る前に、評価結果がboolean値になる演算子である関係演算子と等値演算子について解説をしておきます(下記リストはインデックスになっています)。
■ 関係演算子
「x ≧ 5000」というような式をJavaで表現するためには、関係演算子を使います。関係演算子のうち、数値を比較するのに使用する数値比較演算子の一覧を表1に示します。「 ≧ 」といった比較は「 > 」といった不等号と等号(=)とを組み合わせて記述する点に注意しましょう。
| 表1 数値比較演算子 | |||||||||||||||
|
注意! 「instanceof比較演算子とは?」 |
| 関係演算子には、「instanceof比較演算子」という参照型(リファレンス型)の比較をするための演算子もありますが、この時点では数値比較演算子だけを理解しておけばよいので、解説をしていません。 これはオブジェクトの型が一致しているかを比較する演算子なので、クラスとオブジェクトについて解説をした後に説明する予定です。 |
■ 等値演算子
等しいとか等しくないという関係を表現するためには、等値演算子を使います。等値演算子のうち、数値を比較するのには数値等値演算子を使い、trueやfalseといった真偽値を比較するのには真偽等値演算子を使います。数値等値演算子、真偽等値演算子の一覧を表2に示します。数学では、等値は「 = 」であり非等値は「 ≠ 」ですが、Javaではそれぞれ「 == 」と「 != 」と記述します。
| 表2 数値等値演算子と真偽等値演算子 | |||||||||
|
■ 数値等値演算子と真偽等値演算子の微妙な違い
数値等値演算子と真偽等値演算子の記号は同じですが微妙な違いがあります。Sample30を作成したときと同様の手順で、Sample31のコードをEclipseで作成してみましょう。
「(a==b)==c」という式ではエラーが発生しませんが、「(ia==ib)==ic」という式ではエラーが発生します。Eclipseでは、赤い波の下線が付き、左側に表示されるバツ印にマウスポインタを置くと、「演算子 == は引数の型 boolean, int で未定義です」と表示されます。
これは、なぜでしょう?
| リスト3 |
public class Sample31 { |
boolean型変数a、b、cを使って、「(a==b)==c」という条件式を記述すると、「 == 」は真偽等値演算子となりコンパイル可能です。ところが、int型変数ia、ib、icを使って「(ia==ib)==ic」という条件式を記述すると==は数値等値演算子となりコンパイルできなくなります。
コンパイルエラーになるのは、「(ia==ib)」の演算結果がboolean値となるのに対し、icはint型なので、「(ia==ib)」の演算結果の型とicの型が一致しないことが理由です。
■ 論理演算子を組み合わせると……
iaとibとicがすべて等しいという条件式を指定したい場合は、「(ia==ib) && (ib==ic)」のように論理演算子を組み合わせる必要があります。実際に、そのように変更をすると、コンパイルエラーは消えて、Eclipse上でも赤い波の下線が消えます。
| リスト4 |
public class Sample31 { |
また注意! 「参照等値演算子とは?」 |
| 等値演算子には、参照等値演算子というオブジェクトの等値性判定をするための演算子もありますが、この時点では数値等値演算子と真偽等値演算子だけを理解しておけばよいので解説をしていません。 これもinstanceof比較演算子と同様にクラスとオブジェクトについて解説をした後に説明する予定です。 |
if-then-else文もJavaで書いてみよう
それでは、単純なif-then-else文サンプルプログラムを動作させてみましょう。if-then文サンプルプログラムを作成したときと同様にしてSample32クラスを作成し、リスト5となるようにコードを追加してください。
| リスト5 |
public class Sample32 { |
最初のif文では条件式がtrueなので、「System.out.println(true);」が実行されます。次のif文ではxが1のときは条件式「(x < 3)」がtrueなので、「System.out.println(true);」が実行されます。3つ目のif文では、xが1のときは条件式「(x >= 3)」がfalseなので、この場合はelse以降の文が実行されます。
ここでは、そこにまたif文がありxが1のときは条件式「(0<x && x<2)」がtrueなので、「{ System.out.println(false); System.out.println(true); }」のブロックが実行されます。ブロックの中では、条件式「(x >= 3)」の判定結果と条件式「(0 < x && x < 2)」の判定結果を順に表示する処理を記述してある点に注意しましょう。これらのことから、実行結果は以下のようになります。
| リスト5の実行結果 |
true |
次ページでは、Eclipseのソースコードフォーマット機能を使ってみましょう。さらに、場合分けが多いときにはコンパクトな「switch文」について説明します。
| Index | ||||||||
|
||||||||
【改訂版】Eclipseではじめるプログラミング バックナンバー 連載インデックスへ»
- 第1回 Eclipse 3.4で超簡単Javaプログラミング基礎入門
- 第2回 Javaで一から理解するプログラムの変数と演算子
- 第3回 プログラミングの醍醐味! Javaで“条件式”を理解する
- 第4回 プログラミングの真骨頂! Javaで“反復処理”を覚える
- 第5回 データ集合を扱うのに便利なJavaの配列と拡張for文
- 第6回 複雑なデータを表現できるクラスやフィールドって?
- 第7回 クラスの振る舞いを表すJavaの“メソッド”とは?
- 第8回 Javaの参照型を文字列操作で理解して文法を総復習
- 第9回 プログラムを「変更」しやすくする“インターフェイス”
- 第10回 Javaの実案件に必須のパッケージとインポートを知る
- 第11回 「static」でクラス共有の変数・メソッドを使いこなせ!
- 第12回 継承やオーバーライドで簡単にクラスを“拡張”しよう
- 第13回 “コンストラクタ”と初期化、本当に理解できてる?
- 第14回 再利用性の高いクラス作成に重要な“アクセス制御”
- 第15回 Javaは「抽象クラス」で実装を上手に再利用できる
- 第16回 “ネスト”した型で始める軽量Javaプログラミング!?
- 第17回 あなたの知らない、4つのマニアックなJava文法
- 第18回 強く型付けされているJavaの理解に必修の“型変換”
- 第19回 キュー構造をJavaで実装してジェネリック型を理解する
- 第20回 拡張for文の真の実力を知り、反復処理を使いこなせ
- 第21回 7ステップで理解するJavaでの列挙型/enum使用法
- 第22回 いまさら聞けない「Javadoc」と「アノテーション」入門
- 第23回 プログラマの宿命! 例外とエラー処理を理解する
- 第24回 Javaの例外処理で知らないと損する7つのテクニック
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

