例題で学ぶ Java 入門
大堀隆文

博士
（工学）

木下正博

共著

コロ
ナ社

工学博士

コロナ社

えが

きロナ社

まコ2

まえがき

情報教育を専門とする大学ではプログラミング教育コースは全学生が受講する必修科目であり，全員がそのコースにて必要とされる最低限の能力や技量を身につけなければならない。しかし，「プログラミングに王道なし」といわれ，どんな教え方をしても学生本人のモチベーションがなければ，プログラミングのスキルを修得することはできない。例えば，著者らの大学ではプログラミン社

グ言語 Java（以下，Java）のための科目を 1 年後期から開講している。ここ
で，重要な要素は初めてプログラミングに接する学生が興味やおもしろさを継続して感じ，学習への意欲を保持できるか否かにある。しかしながら，学生のロナ

Java 学習へのモチベーションを保つだけではなく，さらにより興味を湧き立たせる例題や課題を用意することは難しい。従来，学生のモチベーションを保つ試みとして，ゲーム作成1）やペア・プログラミング2）など，いろいろな方法が試みられているが，従来の課題はおもしろく興味があるが難しすぎて理解に苦しむというようなことをよく聞く。

コ

また，どの言語にもいえることであるが，プログラミングを教える順序にはさまざまな方法がある。Java の場合でも，アプレットから教える，オブジェクト指向から教えるなどの方法がある。どの方法も一長一短があるが，学生全員が落伍しないでプログラミングを楽しんで覚えるためには，難解なオブジェ
クトやクラスの概念が薄い，コンソールアプリケーションから始めるのがベストであると考える。
従来コンソールアプリケーションは，文字ベースであるためアプレットなどと比べ応用範囲が狭く，なかなか良質な課題を作ることができなかった。ま1）Michael Koling et al.：Game Programming in Introductory Courses With Direct State
Manipulation. ITiCSE05（2005）
2）Laurie Williams et al.：Pair Programming in an Introductory Computer Science Course：
Initial Results and Recommendations（2002）

ii

まえがき

た，従来のテキストの例題や課題は数学系に偏り，数学が苦手な学生，特に文科系の学生には敷居の高いものであった。本書では，文字列処理を基本に据え，学生が興味の引きそうな例題や課題を多く開発し，学生のモチベーションを保ちながら Java の基礎を習得することを目的とする。本書で開発した例題と課題は，どのようにして学生の興味を引くかという観点から次の四つのカテゴリに分かれる。
（１）身近な話題を含む課題

学生が思わず引き込まれていくような学生に密接な関係のある大学や地域の話題を課題の中に取り入れる。
（２）アイドル名を含む課題

今はやりで学生に人気のあるアイドルを課題の中に登場させる。
クリスマスなどの講義の開講時期に合わせた社（３）季節感のある課題

課題により学生の興味を引く。
（４）ゲーム風プログラムの課題

現在の学生の大半が興味をもつゲー

ロ
ナムそのものまたはゲームの一部を体験させる。
本書は以下の 6 章から構成される。1 章では，Java の概要を述べる。Java の歴史，Java の特徴，Java のインストールからなり，最後に Java を使ったプログラム開発の流れを説明する。2 章では，無料で世界で最も多くの人が使用している Java プログラム開発環境である Eclipse について述べる。Eclipse の概コ要，Eclipse のインストール，Pleiades による Eclipse の日本語化，Eclipse による簡単なプログラム作成方法について述べる。3 章では Java によるプログラミングの基礎を述べる。コメント，簡単なプログラムと注意点，文字と文字列の表示の後，最後に変数を使ったプログラムの作成方法について述べる。4章は，プログラムの流れを制御する判断文について述べる。条件式の考え方，
Java による単純な条件式 if 文の使い方，より複雑な複合条件をもつ複合 if 文，多方向分岐の switch 文について述べる。5 章では，同じような処理を繰り返す反復文について述べる。繰り返しの考え方，Java による繰り返しの仕組み，単純 for 文，for 文の入れ子，while 文によるプログラム作成について述べる。
6 章では，プログラミングに欠かせない配列について述べる。配列の必要性，比較的簡単な一次元配列，少し高度な二次元配列によるプログラム作成方法に

まえがきiiiついて述べる。
本書は大学等の講義においても使用できるように，それぞれの章において例となるプログラムと課題を用意している。例のプログラムは実際に入力し，実行してみることでプログラムの流れを確認することができる。課題はプログラムを作成するものであるが，解答例を Web ページ†からダウンロードすることができ，自分で作成したプログラムと比較し学習することができる。
難しいと思われている Java プログラミングは，もしモチベーションが下がればさらに難しいものとなる。本書はモチベーションを保つ試みの一つとして学生が興味をもちそうな例題と課題を作成した。是非，本書を読んで一人でもプログラミングが好きな学生が現れることを願ってまえがきとする。

社

なお，本書の作成にあたって北海道工業大学大学院応用電子工学専攻博士課
程 1 年の早坂亮佑君，電気工学専攻の木暮直記君（現在雪研スノーイーターズ勤務）には，われわれの作成した例題や課題に関して貴重な意見をいただいロナた。この場を借りて謝意を表したい。

最後に，われわれをいつも陰からサポートしてくれている妻の大堀真保子と木下倫子に最大の感謝の意を表したい。彼女らの支えがなければこのテキストが完成することはできなかっただろう。そして，本書の企画から完成まで，さまざまな面でご助力いただいたコロナ社の関係者の皆様に，改めて感謝申し上

コ

げます。

2012 年 9 月

著者を代表して

大堀隆文

執筆分担

†

1 章〜3 章，6 章

木下正博

4 章，5 章大堀隆文

http://www.coronasha.co.jp/np/isbn/9784339024685/
本書の書籍ページ。コロナ社の top ページから書名検索でもアクセスできる。ダウンロードに必要なパスワードは「024685」。

目次

1.

Java の 概 要Java の 歴 史

1

1.2

Java の 特 徴

2

1.3

オブジェクト指向

3

1.4

アルゴリズムとフローチャート

4

1.5

Java のインストール

1.6

Java を使ったプログラム開発

ロナ

2.
Eclipse

2.2

Eclipse のインストール

Eclipse と Pleiades のインストール（日本語化）

Eclipse による簡単なプログラミング

コ

2.3

7

9101114

プログラミングの基礎

3.

3.1

5

Eclipse による Java プログラム開発

2.1

2.2.1

社

1.1

画面出力とコメント

19

3.1.1

画面に 1 行ずつ表示する簡単なプログラム

19

3.1.2

コメントを付ける21

3.2

プログラミングの注意点

22

3.3

文字と文字列の表示

24

3.4

変27

数

3.4.1

変数とは

28

3.4.2

変 数 の 宣 言

29

目

次v

3.4.3

変数への値の代入

29

3.4.4

変数の値の出力

29

3.4.5

変数の初期化31

3.5

演 算 と 表 示

34

3.5.1

算 術 演 算 子

34

3.5.2

文字列型変数と文字列リテラル表示

35

3.5.3

キャスト（型の変換）の基礎

38

キーボードからのデータ入力

39

3.7

まめ

46

3.8

プログラム演習

46と4.
条件式とは何か？

4.2

Java における条件式断文

ロナ

4.1

判社

3.6

55
56

最も単純な分岐「if-then 文」

56

4.2.2

if-then 文を使った Java プログラム例

57

4.2.3

if-then-else 文を使った Java プログラム例

60

4.2.4

if 文で用いる「比較演算子」の種類

61

4.2.5

より複雑な if 文（if 文の入れ子）

62

合

65

4.3

コ

4.2.1

複条件

4.3.1

OR 条

件

65

4.3.2

AND 条件68

4.3.3

NOT 条件70

4.4

多 方 向 分 岐

72

4.4.1

switch

4.4.2

switch 文を使った Java プログラム例と文

72
73

4.5

まめ

77

4.6

プログラム演習

77

vi

目

次5.

反復文

5.1

回数指定の繰り返し

90

5.2

繰り返しで for 文の変数を利用

94

5.3

変数を用いた for 文のサンプルプログラム

97

5.4

for 文 の ネ ス ト

104

5.5

while

文

112

5.6

まめ

115

5.7

プログラム演習115

6.

配列社と連続したデータ

6.2

配列の宣言とメモリ領域の確保

6.3

配列の初期化

6.4

配列の要素数140

6.5

多 次 元 配 列

143

6.6

まめ

148

6.7

プログラム演習

149

コ

索とロ
ナ

6.1

引

134
136
138

163

1
Java の 概 要
本章では，Java の特徴や歴史的背景を説明し，Java を使ったプログラム開発について簡単に説明する。Java によって初めてプログラムを学ぶ場合，他の言語との比較やなぜそのような特徴があるのかを把握しづらいかもしれない。よって，本章にJava の 歴 史ロナ

1.1

社

おいて説明していることがらを前提として学習を進め，徐々に理解を深めた後で再度この章を読み返すとよい。

1946 年に世界初の汎用コンピュータ ENIAC が開発されてから，コンピュータの世界ではさまざまなプログラミングのための言語が開発されてきた。コン
ピュータそのものの基本構造はほとんど変化がないのに対して，なんらかの作

コ

業をコンピュータに処理をさせるための命令，いわゆるプログラムの仕組みは少しずつ基本的概念も含めて変化してきている。特にオブジェクト指向といわれる概念はかなり以前までは存在しない概念であった。現在，主流のプログラ
ミング言語は 1970 年代に開発されたものから発展してきたが，Java は比較的新しい言語である。
Java は 1991 年アメリカの Sun Microsystems 社で開発が始められたといわれている。その後，1994 年に Java の仕様が完成し翌年に発表され，JDK（JavaDevelopment Kit）としてリリースされた。ここでは，アプレット（applet）と呼ばれる Web ブラウザで動作するプログラムも含んでいたため，インターネッ
トの普及とともに Java が注目を集めるようになった。そして 1998 年に JDK

21.

Javaの

概要は名称を Java 2 SDK（Software Development Kit）に変えている。その後，2004 年には JDK（Java SE Development Kit）に再度変更になった。
Java 2 SDK では，拡張モジュールとして提供されていたさまざまな技術が開発対象ごとにまとめられ，J2SE（Java 2 Platform, Standard Edition），J2EE（Java 2 Platform Enterprise Edition），J2ME（Java 2 Platform, Micro Edition）など対象ごとに複数の開発基盤が登場した。
このように Java の開発環境である JDK はバージョンアップを重ね，すべての開発対象を網羅することを意図した Java 2 となった。その後も，変更が加えられ現在は JDK7 . 0 という開発環境が利用されている。

社

現在では，スタンドアロンやネットワーククライアント環境をはじめ，サーバサイドあるいはモバイル環境にいたる多くのアプリケーションの開発に利用ロナ

されている。

1.2

Java の 特 徴Java はオペレーティングシステム（OS：operating system）の種類や環境に依存しない性質とネットワーク環境に対応した機能が多いことから，インターコ

ネット利用の拡大とともに多くのプログラム作成者に受け入れられている。
Java のコンパイラ（compiler）は，実行するコンピュータの環境に対応したコード（ある種の命令のこと）に変換するのではなく，中間の言語まで変換する。コンパイラはプログラムのソースコードをコンピュータが実行できるような機械語に変換するプログラムである。中間言語は，バイトコードと呼ばれる形式で保存されるので，異なるさまざまな OS で実行することができる。この中間言語までの変換により OS に依存することのない開発が可能となる。また，Java はオブジェクト指向を意識して作られており，ライブラリには実行時に使える部品が豊富に用意されている。以上をまとめると，①オブジェクト指向，②プラットフォームに依存しない性質，③豊富なネットワーク関連機能，④充実した標準クラスライブラリ，という特徴がある。

1.3

オブジェクト指向

3

さらに，Java にはプロセスを並行動作させるマルチスレッド，使われなくなったメモリ領域を自動的に整理するガベージコレクション機能，プログラムの暴走を未然に防御する例外処理機能などいくつかの特徴がある。

1.3

オブジェクト指向

Java の基礎はオブジェクト指向（object-oriented）である。オブジェクト指向はオブジェクトを一義的に考える方法論である。クラス（class）はオブジェクト（object）を抽象化したもので，ここでは，簡単のためにクラスを単位と社してプログラムを作成していくと考える。オブジェクトはプログラムの世界において対象となる「もの」を意味している。通常オブジェクトはデータと処理を一体にして抽象化したものと考えることができる。例えば「車」という「もロナの」を考えると，寸法や色はデータに，走るという動きはプログラムに相当する。「車」というオブジェクトを抽象化すると「スポーツカー」というクラスや「トラック」というクラスを作り出すことができる。しかし，このような定義はしばしばあいまいであり，オブジェクト指向を難しいものにしている。このようなオブジェクト指向にもとづくプログラミングはオブジェクト指向プロコグラミング（object-oriented programming）と呼ばれている。
オブジェクト指向プログラミング以前のプログラミング手法で最も一般的なものは構造化プログラミングである。プログラムを構造的に構築し，プログラムの処理を流れとしてとらえることができ，しばしばフローチャート（流れ図
flow chart）が使われる。例えば，順次処理，分岐処理，繰り返し処理などの基本プログラム構造を組み合わせてプログラムの構成を考えていく手法であり，フローチャートによって視覚的にプログラムの動きを理解することができる。しかし，構造化プログラミングだけではソフトウェアの再利用や開発労力の面で障壁があることがわかってきた。そこで，ソフトウェア開発の面からもオブジェクト指向が注目されるようになった。
オブジェクト指向では，いくつかの概念が導入されているが，主に① カプ

4

1.

Javaの

概要

セル化，② 継承，③ ポリモフィズムの 3 点をあげることができる。
〔1〕 カプセル化

カプセル化（encapsulation）は，データとプログラムを一体化することである。カプセル化によって，オブジェクト以外の処理からそのオブジェクト内のデータを扱うことができなくなる。いい換えると，外部からのオブジェクト内の参照が不可能となる。これによって，小さい部分をオブジェクトとして分割し，全体を作り上げることが可能となる。例えば，ソフトウェア開発において分担して開発を行うような場合にきわめて有効な手法となることが考えられる。
〔2〕 継承継承（inheritance）はオブジェクトから新しいオブ社

ジェクトを作成するとき，古いオブジェクトの性質を受け継ぐことができることである。このとき，クラスも継承の対象となるが，古いクラスはスーパクラス（superclass），新しいクラスはサブクラス（subclass）といわれる。このとロ
ナき，データとプログラムを受け継ぐので同じ定義を繰り返し記述する必要がなくなり，新しいクラスで必要な定義のみを追加すればよい。このように，継承はソフトウェア開発において再利用を可能にする概念である。
〔 3 〕 ポリモフィズム

ポリモフィズム（polymorphism）は異なるオブジェクトに対して類似の処理を行う場合，オブジェクトが属するクラスによっコて処理が変わる仕組みである。これによって，異なるオブジェクトを同様のインタフェースで扱うことが可能になる。

1.4

アルゴリズムとフローチャート

Java に 限 ら ず， プ ロ グ ラ ミ ン グ 言 語 を 習 得 す る た め に は ア ル ゴ リ ズ ム（algorithm）の理解が重要である。アルゴリズムとは計算手順，または算法といわれる。一般的には，これらを組み合わせて具体的問題を解く。この手順を基本的な図形や線，矢印で図式化したものがフローチャートである。Java においてもクラス単位ではフローチャートで記述することができる。さらに，記述される処理は基本構造を組み合わせたものとなるが，次のような基本構造が

1.5Java のインストール

5ある。
・順 次 処 理・分 岐 処 理
・繰り返し処理
順次処理は，いくつかの処理を連続的に行う構造である。分岐処理は条件の真偽により処理を選択する構造である。繰り返し処理は，同一の処理を繰り返し行う構造である。フローチャートでは，基本処理に対応した記号が用意されており，これらの記号を線で結ぶことによってアルゴリズムを表現する。フ
ローチャートは縦に書かれ，処理は上から下へ流れる。

端子判断

定義済み処理

結合子ロナ

処理社

主なフローチャート記号として図 1 . 1 のようなものがある。

データ入出力

主なフローチャート記号

コ

図 1.1

フローチャートの有効な点は，図式化することにより，プログラムの流れを視覚的に把握できることである。複数人でプログラムを開発する場合，プログラムそのものではなく，フローチャートを用いることによって，プログラムの説明や理解を容易にしている。

1.5

Java のインストール

Java JDK は Sun Microsystems 社が無償で提供している Java の開発，実行環境を提供する Java プラットフォームで，コンパイラ，デバッガ，クラスライブラリ，実行環境などが含まれる。現在は Sun Developer Network のサイトから入手

61.

Javaの概要（http://java.sun.com/javase/ja/6/download.html），あるいは，ORACLE が提供しているサイト（http://www.oracle.com/technetwork/jp/java/javase/downloads/

社

index.html）を利用し入手することもできる（図 1 . 2）。

図 1 . 2 ORACLE のJava トップページ

また，java.com のサイト（http://java.com/ja/download/）では「無料 Javaロ
ナのダウンロード」の部分をクリックするだけで簡単にインストールすることがコできる（図 1 . 3）。

図 1 . 3 java.com のトップページ

Java は Java 仮想マシン（Java Virtual Machine：Java VM）という形式で実行される。これは，バイトコードをそのプラットフォームのネイティブコードに変換して実行するソフトウェアである。Java で開発されたソフトウェアはプラットフォームから独立した独自のバイトコード形式となっており，そのままでは実行することができない。このため，プラットフォーム固有の形式であ1.6Java を使ったプログラム開発

7

るネイティブコードに変換するソフトウェアを用意して変換しながら実行する。この変換と実行を行うのが Java VM である。本書では次章で説明する
Eclipse がこれらの作業をすべて行っているので，JDK と Eclipse を用意することによりすべての実行環境を整えることができる。

1.6

Java を使ったプログラム開発

Java で作ることのできるプログラムには，クライアントで動作するアプリケーション，Web ブラウザ上で動作するアプレット，サーバ側で動作するサー社

ブレットなどがある。

一般にプログラム開発は，①ソースファイルの作成，②コンパイル，③バイトコードの実行，④デバッグという流れで進められる。エラーが発生した場合①ロナには①に戻り，ソースファイルの修正作業を行い再度②〜④を行う。
ソースファイルの作成

プログラムの仕様が決定したあとソースコードを作成する。このことをコーディングという。具体的には Eclipse のエディタ画面において入力し，ファイルとして保存する。これをソースファイルという。

コJava ではソースファイル名とクラス名を同じにしなければならない。ここでは，英大文字小文字を区別することに注意しなければならない。ソースファ
イルの拡張子は . java にしなければならない。
②

コンパイル

ソースファイルに記述したプログラム（ソースコード）をバイトコードに変換する。コンパイルはソースコードをコンピュータが理解できるコードに翻訳することである。Eclipse ではメニューの中の「実行」を選択することにより，自動的にコンパイルと実行が行われる。また，同時にファイルへの保存も行われるので，開発者は明示的なコンパイルを意識することなく作業を進めることができる。何もコンパイルの異常な状態が表示されず，実行した結果がモニター表示領域に表示されればコンパイルと実行が成功したことになる。もし，コンパイルに失敗した場合はモニター表示領域にコン81.

Javaの概要

パイルエラーが表示される。エラーメッセージには行番号やその理由が表示される。これらを参考にソースファイルを修正して再度コンパイルと実行を行う。コンパイルに成功すると，拡張子が . class というバイトコードのファイルが生成される。これをクラスファイルと呼ぶ。
③

バイトコードの実行

クラスファイルとは，コンピュータ固有の環境とは完全に独立した Java 仮想マシン上の実行ファイルである。コマンドによる実行形式の場合，Javac コマンドによって Java 仮想マシンを起動し，指定されたクラスファイルを読み込んで実行する。Eclipse ではこれらの処理をすべる。
④

デ バ ッ グ社て統合開発環境の中で行うので，プルダウンメニューの中の「実行」を選択すプログラムには誤りが存在し，実行に至らないものが出てくる。この「誤り」のことをバグ（bug）といい，このバグを見つけ出しロナ

修正することをデバッグ（debug）という。バグのことを単にエラーと呼ぶこともあり，これらを取り除く必要がある。

以上のように Java プログラム開発ではいくつかのステップを踏むが，本書では Eclipse を利用し効率的な開発を行うことを目的としており，Eclipse にコついては次章で詳細を説明する。

索
【あ】

【こ】

アプレットアルゴリズムアンダースコア

1 更新部
4 構造化プログラミング
28 後置コメント
コード
コメント
21 コンパイラ
143【い】
1 行コメント1 次元配列サブクラス
25 算術演算子
34

【し】

ロナ

エスケープシーケンス
演算子

トレース

113, 114【ね】

91
3 ネスト（入れ子）
22
【は】
20
21 バイトコード
2 配列（array）
配列変数名
バグ（bug）
4 判断文
34 反復処理

社

【さ】

【え】

【お】

引

104

2134
135
855
90

【ひ】

識別子
28 比較演算子
61
3 字下げ（インデント）
23【ふ】
3 事実上の標準
9
順次処理
63
3 フォーマット機能
3 条件式
55, 91, 112 フローチャート 3, 56, 60, 96
56
2 条件分岐処理
55 ブロック
初期化部
21
91 ブロックコメント
【か】
分岐処理
3
【す】
改 行
21
【へ】
型変換
438 スーパクラス
変 数
カプセル化
27
4
【そ】
変数の初期化ガベージコレクション機能 3
31
添 字135 変数の宣言
29【き】
ソースコード
2
【ほ】
記憶領域
135
【た】
ポリモフィズム
基数変換
4
26
キャスト
29
38, 130 代 入
【ま】
多次元配列
143
【く】
魔方陣
158
【て】
クラス
マルチスレッド
33
繰り返し処理83 デバッグ（debug）【め】
デファクトスタンダード 9
【け】
メソッド
23
【と】
継 承
4
統合開発環境9コ

オブジェクトオブジェクト指向
オブジェクト指向
プログラミング
オペレーティングシステム

索

164

【も】
文字列の比較
文字列連結子引
ランダムクラス 88, 126, 131 論理積
論理値
【り】
論理否定
67
24 論理和26 リテラル【ろ】【ら】
乱88, 126, 131 論理型

数

68
56
70
65

【A】

56

【I】

【O】

4 if-then 文
68 if-then-else 文
if 文

56, 60 object
356, 60 object-oriented
355 object-oriented programming
【B】
3
【J】
break 文operating system
73
2Java 2 SDK
2 OR 条件
65【C】
Java Virtual Machine
26 OSclass
3 Java VM
6【P】
compiler
2 Java 仮想マシン
6
JDK（Java Development Kit） Pleiades
11
【D】
1
【S】
default 文73【L】
Software Development Kit 2【E】
length 属性
141 subclass4
Eclipse（エクリプス）
Sun Microsystems 社
95【N】
superclass
4【F】
new 演算子
137 switch 文
55, 72for 文
90, 91, 115 NOT 条件
70

コロナ社

algorithm
AND 条件【W】

while 文90, 112, 115

── 著 者 略 歴 ──
大堀隆文（おおほり木下たかふみ）

北海道大学工学部電気工学科卒業
北海道大学大学院工学研究科修士課程修了（電気工学専攻）
1978 年 北海道大学大学院工学研究科博士後期課程修了（電気工学専攻）
工学博士
1978 年 北海道工業大学講師
1981 年 北海道工業大学助教授
1993 年 北海道工業大学教授
現在に至る

正博（きのした2003 年
2004 年
2005 年
2010 年まさひろ）

博士（工学）（北海道大学）
北海道工業大学講師
北海道工業大学助教授
北海道工業大学教授
現在に至る

社

1973 年
1975 年

例題で学ぶ Java 入門
Introduction to Java with Examples

ロナⒸ Takafumi Ohori, Masahiro Kinoshita 20122012 年 11 月 30 日

検印省略

初版第 1 刷発行

著

大木隆
文
正博
株式会社
コロナ社
代 表 者
牛来真也
萩原印刷株式会社

者

発 行 者

コ

印 刷 所

112 0011

発行所

★

堀下

東京都文京区千石 4 46 10

コ株式会社

ロ

ナ

社

CORONA PUBLISHING CO., LTD.
TokyoJapan

振替 00140 8 14844・電話（03）3941 3131（代）ISBN 978 4 339 02468 5（吉原）

Printed in Japan（製本：愛千製本所）

本書のコピー，スキャン，デジタル化等の無断複製・転載は著作権法上での例外を除き禁じられております。購入者以外の第三者による本書の電子データ化及び電子書籍化は，いかなる場合も認めておりません。
落丁・乱丁本はお取替えいたします