研究帖41

 

 

 

 


作者へのメッセージ
研究課題 通過点の使い方

研究課題 通過点の使い方

 

     

 

そよ風さん「このクラスの使い方が分らないんです。」

ナイス博士「そうか、どれどれ....コメントのとおりに使えばいいんじゃないか?」

そよ風さん「そうですねえ、....

**************************************************************************   

最短経路を得るには、出発点から到達点までの各通過点について、

そこに至る距離の合計が最短となる通過点を得て、接続する。

**************************************************************************

うーーーん、static void setMinimumRoute()で、最短経路を計算するんでしょうか?」

ナイス博士「うん、多分そうだろうな。クラスメソッドになっているし、これでこのクラスの 配列static Point[] ppの変数を設定するんだな。」

 

 

謎のテキストファイルのコード

*************************************************************************

【Point(通過点)の使い方】

*変数

int id 識別番号

String name 名前

int total=0 その地点までの最短合計距離、初期値=0

int[] distance 各Pointに与えられる、そこから全ての地点までの距離の配列で、 直接行けない所は-1、そこ自体への距離は0とする。

Point pre=null そこに至る最短経路の、1つ前の通過点で、初期値はnull。

static Point[] pp このオブジェクトのクラス配列変数。

 

*メソッド

public static void setMinimumRoute() このクラスの配列を使って最短経路を計算する。

public boolean setTotal(boolean b) 各地点に至る最短経路の距離を計算する。距離が変更 されたらtrueを返す。

*************************************************************************

 

ナイス博士「ようするに、各地点のオブジェクトを作って他の地点までの距離の配列を与えて

public static void setMinimumRoute()を呼び出すんだろう。?」

そよ風さん「ああ、そうですね。じゃ、やって見ましょうか......」

 

   

 

そよ風さん「博士!大変です!」

ナイス博士「おや、またかい。いったいどうしたんだ?」

そよ風さん「BB君のコードに重大な欠陥が見つかったんです!!」

ナイス博士「なんだ!またか。まったく、何時もの事だな。どんな欠陥なんだ?」

そよ風さん「出発点に戻ったり、ゴールを行き過ぎるような設定をすると、無限ループに 陥るんです!!」

ナイス博士「そうか。でも、それは当り前じゃないか?」

そよ風さん「ええ、だからね、そういう時のために例外を作ったんです。コードを見て下さい!」

ナイス博士「ほほう...」

   

 

簡単なクラス図  

IllegalDistanceExcewption.javaのコード

書き換えたPoint.javaのコード

*************************************************************************

【IllegalDistanceExcewption(距離設定例外)】

*各Pointに距離の配列を設定する時は、以下の規則に従う。

 

1.最初のPointには必ず出発点を設定しなければいけない。(距離の配列の最初が0になる。)

2.最後のPointには必ず到着点を設定しなければいけない。(距離の配列の最後が0になる。)

3.出発点には戻れない。(出発点以外のPointの、距離の配列の最初が-1になる。)

4.到着点を越えて他には行けない。(到着点の距離の配列は、最後は0、それ以外は-1)

 

この規則を守らないと、例外が起きて、罵倒される。

*************************************************************************

 

ナイス博士「なるほどね...ところで、変わったアプレットだな。」

そよ風さん「そうなんですよ。ねえ、博士、いつも同じようなアプレットばかり作ってて、 飽きませんか?」

ナイス博士「そりゃまあ、飽きるけど、仕方ないじゃないか。」

そよ風さん「いや、それでね、いつでも使える便利なアプレットが出来ないか、って思ったんです。」

ナイス博士「うん、それは出来れば便利だろうな。」

そよ風さん「でね、スーパークラスを作ったんです。」

ナイス博士「ほほう、どれどれ...」

 

   

 

UsefulAppletのコード

AppletPlayerのコード

*************************************************************************

【便利なアプレットの使い方】

抽象クラスUsefulAppletは継承して使う。ボタンが付いているボーダーレイアウトのフレームになる。

サブクラスで下記メソッドをオーバーライドする。

public String[][] getBString() 2次元配列の文字列でボタンの配置とそのテキストを決める。

public void setAction(String actionword) ActionPerformedから呼び出される。引数で ボタンの文字列を与えられるので、それで条件分岐する。

*************************************************************************

 

そよ風さん「これさえあれば、ソフトを作るたびに同じようなアプレットを書かなくても、 必要な所だけオーバーライドすればいいんです!」

ナイス博士「おおっ、それはいい!便利そうだな。!」

そよ風さん「じゃ、アプレットを動かしてみましょう!」

 

 

 

アプレット

ナイス博士「おおっ!ちゃんと動くな!」

そよ風さん「ええっ、.....で、これからどうしましょうか?」

ナイス博士「うん、...どうしようか.....」

 

 

 

須狩捜査官博士!博士!

そよ風さん「あらっ、須狩さん、どうしたの?」

ナイス博士「何かあったのかい??」

須狩捜査官「博士!大変です!馬番場主任から、またもやメールが届いたんです!!!」

ナイス博士、そよ風さんメールが届いた!??!!??!!

 

続く。

 

」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」

 

作者へのメッセージ

 

研究課題に戻る。

 見学者への注意事項に戻る。