
【改訂版】Eclipseではじめるプログラミング(3)
プログラミングの醍醐味! Javaで“条件式”を理解する
株式会社ガリレオ
小山博史
2009/2/25
■ 条件を変えて、ソースコードフォーマット機能を使ってみよう
次に確認のために、「if (true)」の部分を「if (false)」と変更し、「x = 1」の部分を「x = 2」と変更してみましょう。
ただし、リスト5のままではif文による処理の流れが一目では分かりにくいので、Eclipseのソースコードフォーマット機能を活用して見た目を整えます。Sample32クラスのソースコードを表示しながら、メニューで[ソース]→[フォーマット]を指定して実行すると、リスト6のように整形できます。
| リスト6 |
public class Sample32 { |
最初のif文では条件式がfalseなので、「System.out.println(false);」が実行されます。次のif文ではxが2のときは条件式「(x < 3)」がtrueなので、「System.out.println(true);」が実行されます。3つ目のif文ではxが1のときは条件式(x>=3)がfalseなので、この場合はelse以降の文が実行されます。
ここでは、そこにまたif文がありxが2のときは条件式(0<x && x<2)がfalseなので、{ System.out.println(false); System.out.println(false); }のブロックが実行されます。これらのことから、実行結果は以下のようになります。
| リスト6の実行結果 |
false |
このほか、xの値を負の値にしたり、3より大きい値にしたりして実行してみると、さらに理解が深まると思います。興味のある読者は試してみてください。
場合分けが多いときにはコンパクトな「switch文」
図3のような処理はif-then-else文でも表現可能ですが、変数の値によって処理を複数に分岐したい場合には、switch文を使うとコンパクトに記述できる場合があります。
![]() |
| 図3 場合分けが多い処理の例 |
switch文の書き方を説明する前に、図3の処理の流れをif-then-else文とswitch文で実現した場合を比較してみましょう(表3)。
| 表3 if-then-else文とswitch文の比較 | ||||
|
if-then-else文では比較している変数が「 x 」かどうかを全部の条件式を確認しないと分かりませんが、switch文ではそれが一目で分かります。switch文では、「x == 0」というような式をたくさん書かなくてもいいというのもうれしい点です。
■ switch文の書き方
それでは、switch文の書き方を見てみましょう。switch文は次のように記述するのが基本です。
前処理文 |
ただし、式には評価結果が整数値となるものしか使えません。式の結果がcaseで指定した値に一致する場合には、その値に対応するcaseに行き、そこで文が実行されます。式の結果と一致する値がcaseで指定されていない場合はdefaultに行き、文3が実行されます。
■ break文は、「switch文を抜け出す」
break文は、「switch文を抜け出す」という命令です。break文がないとswitch文を抜け出さないので、処理が次の行へ流れていくことに注意しましょう。例えば、「case 値2:」の直前にあるbreak文を削除すると、プログラム実行時に式の評価結果が値1となると文1と文2が実行されてしまいます。
またまた注意! 「評価結果が整数値となる式」 |
| 正確には評価結果がchar、byte、short、int、Character、Byte、Short、Integer、enum型となる式です。 byte、short型は整数値を表す型で、表現できる値の範囲がint型よりも狭くなっています。char型は文字と対応する文字コードの整数値を保持するための型なので、評価結果が整数値となります。ただし、int型よりも大きな整数値を表現できるlong型は使えないので、注意しましょう。 Character、Byte、Short、Integer型は、それぞれchar、byte、short、int型と対応する「ラッパークラス」と呼ばれるものです。enum型とは「列挙型」とも呼ばれる特殊な型です。クラスやenum型については連載の中で別途説明しますので、ここでは、そういうものがあるとだけ、知っておけば十分です。 |
もう分かってますね? switch文もJavaで書いてみよう
それでは、単純なサンプルプログラムを動作させてみましょう。if-then文サンプルプログラムを作成したときと同様にしてSample33クラスを作成し、リスト7のようにコードを追加してください。
| リスト7 |
public class Sample33 { |
このプログラムを実行するとxの値が1なので、「case 1 :」に行き、「System.out.println(1);」が実行されて、「1」が出力されます。
| リスト7の実行結果 |
1 |
xの値を「5」にすると、「default :」に行き、「System.out.println(-1);」が実行されて「-1」が出力されます。
| xの値を「5」にしたリスト7の実行結果 |
-1 |
さらに、xの値を0、2、3と変更して実行して動作を確認してみるとよいでしょう。xの値と同じ数値が出力されるはずです。
■ break文を書かないと……
なお、break文を書かない場合の動作を確認するために、リスト8に示すSample34クラスを作成してみましょう。
| リスト8 |
public class Sample34 { |
break文がないと、caseで一致する値に対応する処理を実行してもswitch文から抜けないため、続く処理が実行されると説明をしました。ですから、例えばxの値が「0」の場合は、数値を出力する処理がすべて実行されるということになります。Sample34クラスを実行すると、次のようになります。
| リスト8の実行結果 |
0 |
処理の流れを制御してプログラミングを楽しもう
今回は、場合によって処理を変えるプログラムを作成するのに必要な条件分岐処理の記述方法について解説しました。「基本的にはif文を使用すればよい」ということと、「場合によってはswitch文を使用するとすっきりした記述ができる」ということの2点を理解できたでしょうか。
また、書いた順に処理を実行するだけではなく、if文やswitch文を使えば処理の流れを制御(コントロール)できるということも理解できたでしょうか。そうそう、Eclipseのソースコードをフォーマットする機能も重宝するはずです。活用してください。
処理の流れを制御できるようになると、プログラムにいろいろな動作をさせることができるようになるので、プログラミングをする楽しみが増えます。今回の解説で、ある程度プログラムの処理の流れを制御できるようになりましたが、完全に処理を制御するためには繰り返し処理という制御も必要です。そこで、次回は繰り返し処理について解説する予定です。
■ @IT関連記事
| コメントと制御文でJavaプログラムに“命”を吹き込め! 携帯アプリを作って学ぶJava文法の基礎(4) プログラミングの醍醐味ともいえる制御構文を使ってJavaプログラムに命を吹き込みましょう。コメントを付けることも大事です 「Java Solution」フォーラム 2008/4/15 |
| Javaプログラムの制御構造を理解する [連載]いまから始めるJava(6) すべてのアルゴリズムは、順次実行、繰り返し、条件分岐のたった3つで記述できます。今回は、制御文を1つ1つ取り上げて、制御構造を理解します 「Java
Solution」フォーラム 2003/6/18 |
||
| Javaの制御文を使いこなそう [連載]いまから始めるJava(7) 前回は制御文の基礎を学びました。今回はさまざまな場面で制御文を使いこなせるようになるために、HTMLパーサを作りながら練習しましょう 「Java
Solution」フォーラム 2003/7/23 |
||
| 日常生活から理解するActionScriptの制御文 Flashの基礎を無料で習得! ActionScript入門(3) if、for、while、switchなどプログラムをより面白くする制御文。日常生活に置き換えれば、理解するのも簡単です 「リッチクライアント & 帳票」フ ォーラム 2008/3/10 |
||
| 第9章 C#のステートメント 連載:改訂版 C#入門 変数の宣言に始まり、条件分岐や繰り返しなどを記述するステートメント。C#のそれは大部分がCやC++からの流用だが、より磨きがかけられている 「Insider.NET」フォーラム 2002/10/16
|
| 筆者プロフィール |
| 小山博史(こやま ひろし) 情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。 著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。 |
| 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 会議室へどうぞ |
| 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 -

