富山便りvol-30           


Javaの世界物語

あるところにJavaという国がありました。

Javaの国では誰一人必要ない人は住んでいません。

それぞれが何かの役割を持って存在しています。

ある時、人間国から突然無理難題を押し付けられました。

「ユークリッドの互除法を使って最大公約数を求めるプログラムを作りなさい」

人間国の属国であるJava国は逆らうことを許されていません。

Java国を治めるJava王は人間国の要求を受け入れることにしました。

Java王はインスタンスを作ることにしました。

まずユークリッドというファイルを結成し、ユークリッドというクラスを編成し、そこにユークというメソッドを配置することにしました。

そして、値を入れる役目を持つ変数aを選出し、

「今回お前たちはint型(整数型)として働きなさい」と言いました。

こうしてファイルEucleide.java

クラスpublic class Eucleide が作られ

メソッドpublic void Euc(int a, int b)を作る準備が整いました。

次にJava王は繰り返し動作を続ける役目を持つwhileを呼び、

変数aを引き算してaが等しくない間は動作をやめてはいかんと命令しました。

するとwhileが、「私に出来ることは言われた通りに繰り返しをすることだけです。変数abを引き算する条件が必要なのです」と言いました。

ユークリッドの互除法は

@存在する二つの整数の大きいものから小さいものを引く

A最初の小さいものと@で出た結果を比べ、どちらが大きい数か比べる

B比べてみてどちらが大きいか判断する

C@に戻ってBまでを繰り返し、二つの整数が同じになればそれが最大公約数である

というものである。

そこでJava王は条件を司るifを呼び、

「よいか、変数abどちらが大きいか決めるのじゃ」と言いました。

するとifは「それはできますが、変数は名前はあっても実体のないものです。何が入るかわかりません」と言いました。

Java王は「そうじゃのう、相手はどんな数を言ってくるかわからんしのう」と考え込んでしまいました。

ifは「elseを呼んではどうでしょう、私が決めた条件を満たさない時に役立ちます」と言いました。

Java王はelseを呼び、「よいか、ifが決めた条件で計算できない時はお前がやるのじゃ」と言いました。

elseは「わかりました。」と答えました

「ところで、私たちはどんなことをすればよいのでしょう」とifelseは言いました。

Java王は「そうであった。肝心の計算式を作るのを忘れておった。」

すぐさまJava王はifに尋ねました。「お前の決めた条件はなんじゃ」

「そうですね、変数abより大きいという事にしましょう。」とifは答えました。

「よし、わかった。では、計算式は変数aからbを引くことにしよう。

変数aよ、お前はなんでも入る器なのだから、a-bの結果をまた自分の中に納めるのじゃ」

「わかりました」と変数aは答えました。

Java王は続けて言いました。

elseifは変数aは変数bより大きいという条件を決めおった。ifの決めた条件を満たさなかった時は

お前の元で計算をさせるのじゃ、変数bよ、お前も変数aと同様に、計算結果を自分の中に納めるのじゃぞ」

elseと変数は「わかりました」と答えました。

whileにはこれから行うことを表現する( )、操作する人という意味を持つ演算子グループに所属し、

等しくないという役割を表す関係演算子!=、そして変数abがつきました。

ifには( )、左の方が大きいという関係演算子、変数abがついた後、その下に計算式が編成されました。

今回の数式では変数aから変数bを引くので、減算する役目を持つ算術演算子も呼ばれました。

その時、「私を忘れないでください」という声が聞こえました。

動作の区切りを表すでした。

は区切りをつけるという役割を持っています。がないと終わらないのです。

また、「人間は目に見えないと実感してくれませんよ、私を使って下さい」という声も聞こえました。

Java国にはたくさんのパッケージがあり、クラスが存在しています。

声はjava.langパッケージに所属し、SystemクラスにいるSystem.out.printlnでした。

「あなたが行くなら私も必要だわ。」と+がやってきました。

今回は文字列と数値をつなぐ役です。

Java王は「そうであった、これで大丈夫だ」と言いました。

elseの下にも計算式が編成されました。

elseifの決めた変数aは変数bより大きいという条件を満たさない時、変数bが大きかった時、

計算式を動かします。

編成されたものを区分けする{ }も加わってようやく形になりました。

Eucleide.java

public class Eucleide
 {
  public void Euc(int a,int b)
   {
     while(a!=b)
      {
         if(a>b)
          {
           a=a-b;
          }
        else
          {
           b=b-a;
          }
       }

   System.out.println("最大公約数は"+a+"です"); 
  }
 }

こうしてpublic class Eucleideは、型として存在することになりました。

Java王は「よし、次はMainクラスを作るのだ」と言いました。

メインというファイルを結成し、メインいうクラスを編成しました。

次に「メインクラスでpublic class Eucleideを使えるようにするのだ。」と言いました。

public class Eucleideはインスタンス変数としてJava国に存在しているのですが、

Mainクラスに実体はないのです。

Mainクラスで使うには型(変数)を実体化しなければなりません。

これをJava国ではオブジェクトの生成、もしくはインスタンス化と呼んでいます。

インスタンス化には手順があります。

まず、public class Eucleideを定義して宣言します。

Java王は言いました。

public class EucleideEucleide aとする。」

Eucleide aはオブジェクト変数となり、aと定義されました。

オブジェクト変数aは言いました。

「私がメソッドを実行し、実力を発揮するためには発揮する場所とアクセス方法が必要なのです。

領域を確保して、メソッドへのアクセス方法を示してください。」

Java王はうなづき、言いました。

a=new Eucleide( );

a.Euc( );

これでaはいつでもpublic class Eucleideのところへいき、命令を実行することが出来るようになりました。

その時、丁度人間国から使いが来ました。

「84と60の最大公約数が知りたい。」

Java王は数値、84と60を呼び、「a.Euc( );( )の中に入りなさい」と言いました。

人間国から実際に入れる数値を指示されたので、Mainクラスは完成しました。

public class Main
{
 public static void main(String args[ ])
  {

   Eucleide a;

   a=new Eucleide();
   a.Euc(84,60);
 }
}

Java王は翻訳係のコンパイラと作ったクラスを引き連れ、コンピュータ国へ行きました。

コンピュータ国はJava国と人間国の間を取り持ち、Java国のプログラムを、人間にわかるように

表示してくれます。

コンピュータ国ではコマンドプロンプトが待っていてくれました。

コマンドプロンプトはコンパイラと協力して、プログラムを実行してくれました。

「84と60の最大公約数は12」

それを見て、人間は喜びました。

「あ〜君たちがいるから私たちはすごく楽!、手作業ってホントに大変だし、私たちは間違えちゃうからね」

Java王は人間の喜ぶ姿を見て、肩の荷が下りてほっとしました。

こうして、Java王は無理難題を解決したのでした。

めでたし、めでたし

終わり

富山だより HOME
ひとつ前 次へ