解答は
- ホスト名: earth.mlab.im.dendai.ac.jp
- ディレクトリ: /home/submit/1I-Computer2/[今日の日付]/[学籍番号]
に提出しなさい。クラスファイル (〜.class) は提出しなくてよい。 提出には gFTP 等の ftp ソフトを用いること。
電源を入れてキー入力ができるパソコン (のようなもの) をプログラムの中で表してみよう。 パソコンを表すクラス PC を定義しなさい。 このパソコンには電源スイッチとキーボードがあり、 押したキーに従ってその文字が画面に出力されるものとする。
メソッド type(入力文字) により、引数で指定した文字が画面に表示されるようにしなさい。 また、メソッド enter() により改行されるようにしなさい。
以下のようにメソッド main のあるクラス名は PCUser1 とし、 ファイル名は PCUser1.java とする。
class PCUser1 { public static void main(String[] args) { PC myPC = new PC(); myPC.type('t'); // キー「t」を押す myPC.type('d'); // キー「d」を押す myPC.type('u'); // キー「u」を押す myPC.enter(); // キー「Enter」を押す } } class PC { ..... }
上記のプログラムを実行すると、画面にtduという文字が表示され、改行されて終了する。
$ java PCUser tdu $
上のクラス PC を機能拡張し、 電源をon/offするメソッド power を作成し、 電源が入っていないときにはキーを押しても反応しないようにしなさい。
以下のようにメソッド main のあるクラス名は PCUser2 とし、 ファイル名は PCUser2.java とする。
class PCUser { public static void main(String[] args) { PC myPC = new PC(); myPC.power(); // 電源スイッチを押す(電源が入る) myPC.type('t'); // キー「t」を押す myPC.type('d'); // キー「d」を押す myPC.type('u'); // キー「u」を押す myPC.enter(); // キー「Enter」を押す myPC.power(); // 電源スイッチを押す(電源が切れる) } } class PC { ..... }
ヒント: インスタンス内で電源がonかoffかの状態を保持する必要がある。 boolean 型の変数を属性として用意するとよい。
X 地点と Y 地点の間は 4500m 離れている。 今、秒速 20 m で X 地点から Y 地点へ向かう A 車と、 秒速 25 m で Y 地点から X 地点へ向かう B 車が同時に出発したとする。 2 つの車について、 1 秒ごとの車の位置を表示し、 何秒後にどの地点ですれ違うかを表示するプログラムを書きなさい。
このプログラムは車を表すクラス Car を定義して計算するのが良い。 クラス Car は属性として、
を持ち、メソッドとして、
を持つクラスとして考えるのが一つの方法である。
X 地点から Y 地点へ向かう A 車は位置 0 から 速度 20 で走り、 Y 地点から X 地点へ向かう B 車は位置 4500 から速度 -25 で走ると考え、 2 車の位置を求めれば良い。
メソッド main のあるクラス名は MeetingCars とし、 ファイル名は MeetingCars.java とする。
問題2では、移動する車のシミュレーションを行った。 このように、時間とともに変化する現象を一つ選んで、 簡単なシミュレーションを行うプログラムをつくりなさい。 メソッド main のあるクラス名は Musimulation とし、 ファイル名は MySimulation.java とする。 シミュレーションの対象となるものをクラスとして定義すること。
ソースファイルの先頭に、 そのシミュレーションのタイトルと、 どのような内容かを説明する文章をコメントの形式で書いておくこと。
シミュレーションとは、 実際の現象をプログラムとして再現しコンピュータの中で真似をすることである。 例えば、次のようなシミュレーションが考えられる。
- 落ちていくボール
- 月の満ち欠け