EclipseによるJavaプログラミングの基礎

単純な可視化（プロアトラス使用）
 入力：トリップデータ，ロケーションデータ
 出力：プロアトラスデータ
 緯度経度データをトリップごとに地図形式に変換

マップマッチング 入力：trip，location，リンクデータ，ノードデータ 出力：地図データ，通過リンクデータ，通過経路データ 移動軌跡を実ネットワークに対応させる

PPデータ集計
 入力：trip，location
 出力：ツアーデータ，ツアー内トリップデータ

Eclipse
 統合開発環境(Integrated

Development Environment)

プログラミングのためのコンパイラ，テキストエディタ，デバッガなどを統合した開発環境．

 主にJavaプログラミングに用いられる．


プラグインの導入で他の言語も編集可能 リファクタリングやソースコード編集支援に優れている．


スペルミスの指摘や入力補助 インストール

http://sourceforge.jp/projects/blancofw/wiki/blanco.eclipse.distribution.dev
からSetup.exeをダウンロードすると簡単．
Javaプロジェクトの作成
 プロジェクト

一つのプログラムの基本単位
 MapMatching, VirtualNetwork, DrmChangeなど
 プロジェクトの生成[ファイル]→[新規作成]→[新規プロジェクト]→[Javaプロジェクト] 外部のソースコードから作成する場合は[外部ソースからプロジェクトを作成]でプロジェクトフォルダの場所を指定する．
 srcフォルダにソースコード(.java)が保存される．
 ファイルのエンコードに注意（プロパティ→エンコード）


 実行


Ctrl+F11でデバックなしで実行プログラミングに関する注意事項
 {}ブロック内のインデントは必ず入れる.
Eclipseは勝手に挿入してくれる．

 変数，インスタンス，関数名のつけ方

最初は必ず小文字で始める．cf. クラス名は大文字で始める
 単語の区切りは大文字にする．もしくは_（アンダーバー）でつなぐ．
 Ex) getData(), MAX_BUFFER_SPACE 演算子の前後はスペースを空ける．
y=a*x+b;→y = a * x + b;

オブジェクト指向
 “オブジェクト”と呼ばれる機能の部品でソフトウェアを構成させる．
 オブジェクト：ひとまとまりのデータ
フィールド: オブジェクトの状態を表す値
 メソッド: オブジェクトの機能を表す．
 例）車オブジェクト フィールド：全長，全幅，車高，排気量 etc…
 メソッド：加速，減速，ギアチェンジ, etc…

 Javaではオブジェクトの型をクラスとして定義する．
 クラスの実体を表すのがインスタンス
例）車クラスのインスタンスは「多摩 500 さ 12-34」の車オブジェクト指向によるデータの格納
アクセス修飾子
メンバはprivate
メソッドはpublic

フィールド

各メンバにはgetter, setter
メソッドでアクセスする．
※右クリック→[ソース]→[getterおよびsetterの生成]※1つのクラスは “*.java”という1つのファイルになる．

メソッド

例）オブジェクト指向によるプログラミング例
インスタンスの生成方法
クラス インスタンス名 = new クラス();

setterで各インスタンスのフィールドを設定する

getterで各インスタンスのメンバにアクセスする．

線形リストとハッシュテーブル
 データはインスタンスに格納される．

膨大な数のインスタンスが生成される．
 どうやって整理するか？
 線形リスト：データと次のデータを指すポインタの配列
データ

ポインタ

データ

ポインタ

データポインタ ハッシュテーブル：キーをもとにしたハッシュ値が指すデータからキーとデータの対応づけをしたデータ構造．
keyindex

データ

keyindex

データ

keyindex

データ

keyindex

データArrayList ArrayList：線形リストを実装したクラス．

List<クラス> インスタンス名 = new ArrayList<クラス>(); <クラス>に格納したいデータ型を指定する．
addメソッドでデータを追加
getメソッドでデータを取り出す

HashMap HashMap: ハッシュテーブルを実装したクラス

Map<キー, クラス> インスタンス名= new HashMap <キー, クラス>(); キーにはStringやIntegerなどを指定することが多い．
putメソッドでキーと対応するデータを追加
getメソッドでキーに対応するデータを取り出す

ファイル出入力
 プログラムの外部のデータを操作する．

研究では，基本的にテキストファイル（エディタで開けるファイル）が操作できればよい．
 データを1行ずつ（改行文字まで）読み書きするのが基本 ファイル入力

BufferedReaderクラスを利用．
 BufferedReader インスタンス= new BufferedReader(new FileReader(“ファイル名”)); ファイル出力

PrintWriterクラスを利用
 PrintWriter インスタンス= new PrintWriter(new FileWriter(“ファイル名”))ファイル出入力例
 テキストデータをそのまま別のファイルにコピーする．

出入力クラスのインスタンスをファイル名を指定して生成

readLineメソッドで1行読み込む
printlnメソッドで書き出し※System.out.printlnと同様ファイルが開けない場合の例外処理を行う．

CSV形式のデータの読み込み
 CSV(Comma Separated Value):

カンマ区切りのデータ

PPの生データは通常この形式
名前,性別,国語,数学
 例）

ジョン,男,87,50
マイケル,男,70,77→1行のデータをさらに分解する必要がある．
 StringTokenizerクラスで分解する．
StringTokenizer インスタンス名= new StringTokenizer(分解対象文字列);
 nextToken(*)で*に指定した区切り文字までの文字列を取り出す．文字列の最後に到達すれば， NoSuchElementExceptionを投げる．
CSV形式のデータの読み込み
 CSVファイルをそのまま別のファイルにコピーする．
名前,性別,国語,数学
ジョン,男,87,50
マイケル,男,70,77

分割する文字列を指定してインスタンス生成．

nextTokenメソッドを呼び出すごとに，区切り文字間の文字列を取り出す．引数に区切り文字を指定．

まとめのプログラム
 以下の操作を行う．
1.
2.
3.
4.

車のデータが記入されたCSVファイルを読み込む．
読み込んだデータをCarクラスのインスタンスに格納する．
Carクラスのインスタンスを線形リストにまとめる．
線形リストから順にインスタンスを取り出し，別のCSVファイルに書き込む．

読み込むデータ
ナンバー 全長(mm) 全幅(mm) 車高(mm) 排気量(cc)
1122
5000
2500
1700
2000
2233
4500
2400
1600
1800
3344
4300
2400
1550
1750
4455
3000
2000
1500
1200
5566
4500
2500
1600
1500

Integer.parseIntでString型をInteger型に変換する．

PlotProatrasの構造
 ファイルの読み込み （同時に）トリップ，ロケーションデータの格納 ファイルのプロアトラス形式での書き出し だけ！

TripMap
Trip1

Trip2

Trip3

 クラスは属性を規定する

locationList

locationList

locationList

 Tripクラス

location1

location1

location1

location2

location2

location2

location3

location3

location3

 格納イメージ

トリップID，ロケーションリスト

 Locationクラス
LocationID，トリップID，ユーザーID，緯度，経度など

PlotProatrasの構造
 使用するクラス

自作 Location
 Trip Henkan
 Output：ロケーションデータ属性を設定：トリップデータ属性を設定：データの形式を変換する（日本測地→世界測地など）：データを出力する

FileReader ：データ読み込み BuffardReader
 PrintWriter：データ書き出し
 FileWriter Integer：整数を扱う Double：小数を扱う
 Timestamp ：時間を扱う
課題：ソースコードリーディング PPデータを読み込んで，形式を変換して書き出しを行う

プログラム
1.
2.
3.

CSVファイルの読み込み．
PPデータの格納（Tripクラス．ArrayList利用）
CSVファイルの書き出し．（トリップID,目的のみ）

 課題
1.
2.
3.

ソースコードを読み，プログラムの内容を理解する．
ソースコードにコメントをつける．穴埋め形式．
出力データを増やし，Excelでクロス集計を行う．

※今回取り扱った範囲外のテクニックも含まれる．

Tips
 デバッグ1.

2.

問題が発生していると思われる個所にブレークポイントを置
く．場合によってはブレークポイントを右クリックし，[プロパティ]→[条件]から条件を設定．
デバッグを押し，ブレークポイントに止まるまでプログラムを実行する．変数の中身は[インスぺクション]で確認できる．

 Eclipseのメモリ解放
ウィンドウ⇒設定⇒インストール済みJRE⇒編集⇒デフォルト
VM引数を「-Xmx・・・M」に設定．・・・は任意に数字を指定．

 要素コメントの付け方


クラス・関数名にカーソルを合わせ，右クリック→[ソース]→[要素コメントの作成]