解答は
- ホスト名: earth.mlab.im.dendai.ac.jp
- ディレクトリ: /home/submit/1I-Computer2/[今日の日付]/[学籍番号]
に提出しなさい。クラスファイル (〜.class) は提出しなくてよい。 提出には gFTP 等の ftp ソフトを用いること。
パソコンを表すクラス PC を定義しなさい。電源スイッチとキーボードがあり、 押したキーに従ってその文字が画面に出力されるものとする。 ファイル名は PCUser.java とし、以下の各小問を解いた最終版を提出すること。 クラス PCUser は次のように定義する(メソッドは例)。
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(); // 電源スイッチを押す(電源が切れる) } }
上記のプログラムを実行すると、画面にtduという文字が表示され、改行されて終了する。
$ java PCUser tdu $
メソッド type(入力文字) により、引数で指定した文字が画面に表示されるようにしなさい。 また、メソッド enter() により改行されるようにしなさい。 (メソッド power() は実行しなくてよい)
電源をon/offするメソッド power を実装(作成)し、 電源が入っていないときにはキーを押しても反応しないようにしなさい。
ヒント: インスタンス内で電源がonかoffかの状態を保持する必要がある。 boolean 型の変数を属性として用意するとよい。
CD Player を表すクラス CDPlayer と、 CD を表すクラス CD を定義しなさい。 ファイル名は CDListener.java とし、以下の各小問を解いた最終版を提出すること。
まず CD を CD Player に出し入れができるよう、 少なくとも以下の属性/メソッドを持つクラスを設計しなさい。
クラス CDListener の定義は、例えば以下のようになる。
class CDListener { public static void main(String[] args) { CDPlayer player = new CDPlayer(); // CD 1枚目の生成 CD cd1 = new CD(); cd1.setArtist("Jerry Lee Lewis"); cd1.setTitle("Great Balls of Fire"); // CD 2枚目の生成 CD cd2 = new CD(); cd2.setArtist("The Beatles"); cd2.setTitle("Penny Lane"); // CDの出し入れ player.load(cd1); player.eject(); player.load(cd2); player.eject(); } }
上記の例では、メソッド setArtist(名前) でアーティスト名、 メソッド setTitle(名前) でタイトルを指定している。 これをコンストラクタでも指定できるようにすること。
余力がある人は、矛盾した操作がされたときにエラーを表示するようにしなさい。 例えば、ディスクがすでに入っているのに load しようとしたり、 ディスクが入っていないの eject しようとした場合がこれに相当する。 (eject がトレイの eject だと考えると別。解釈はどちらでもよい。)
ヒント: CD Player の属性として、CD Player に CD が入っているかを表す boolean 型の変数を用意する方法と、 クラス CD の変数を用意する方法の2通りが考えられる。 後者の場合、その変数の値が、
となるようにしておけば、CD が入っているかどうかの判定が可能となる。 具体的には、変数名を cd とすると、CD が入っていないときには cd = null として null を代入しておく。 CD が入っているときにはその CD のインスタンスを入れておく。 CD が入っているかどうかを調べるには if(cd == null) ... として値が null かどうかを調べればよい。
CD が演奏できるよう、クラス CD およびクラス CDPlayer の定義を変更しなさい。 少なくとも以下の属性/メソッドは追加すること。
各トラックの曲名は以下のように外部から指定してよい。
class CDListener { public static void main(String[] args) { CDPlayer player = new CDPlayer(); // CD 1枚目の生成 CD cd1 = new CD(); cd1.setArtist("Jerry Lee Lewis"); cd1.setTitle("Great Balls of Fire"); String[] cd1Tracks = new String[2]; // 2トラック分のタイトルを保持する配列 cd1Tracks[0] = "Great Balls of Fire"; // 1曲目タイトル cd1Tracks[1] = "You Win Again"; // 2曲目タイトル cd1.setTracks(cd1Tracks); // CD 2枚目の生成 CD cd2 = new CD(); cd2.setArtist("The Beatles"); cd2.setTitle("Penny Lane"); String[] cd2Tracks = {"Penny Lane", "Strawberry Fields Forever"}; // こういう初期化も可能 cd2.setTracks(cd2Tracks); // CD 1枚目を再生 player.load(cd1); player.play(); // 全曲演奏 player.eject(); // CD 2枚目を再生 player.load(cd2); player.play(); // 全曲演奏 player.play(2); // 2曲目だけ演奏 player.eject(); } }
問題 2-1 ではアーティスト名とタイトルをコンストラクタで指定できるようにしたが、 今回は各トラックの曲名もコンストラクタで与えることができるようにすること。 簡単には、上記の cd1Tracks のように String の配列をあらかじめ用意しておき、 その配列をコンストラクタの引数として与えればよい。 引数の型は String[] となる。
実行例:
$ java CDListener Artist: Jerry Lee Lewis Title: Great Balls of Fire now playing: Great Balls of Fire now playing: You Win Again ejected. Artist: The Beatles Title: Penny Lane now playing: Penny Lane now playing: Strawberry Fields Forever now playing: Strawberry Fields Forever ejected. $
なお、CD の内容はこの例題や友達とは異なるものにすること。
前回の問題3では移動する車のシミュレーションを行った。 このように、時間とともに変化する現象を一つ選んで、 簡単なシミュレーションを行うプログラムをつくりなさい。 ファイル名は MySimulation.java とする。
ソースファイルの先頭に、 そのシミュレーションのタイトルと、 どのような内容かを説明する文章をコメントの形式で書いておくこと。
シミュレーションとは、 実際の現象をプログラムとして再現しコンピュータの中で真似をすることである。 例えば、次のようなシミュレーションが考えられる。
- 落ちていくボール
- 月の満ち欠け
前回の問題3が2台の車のシミュレーションであることに注目する。 このように、 2つの同じ種類のものが相互作用するような現象を考えて、 簡単なシミュレーションを行うプログラムをつくりなさい。 ファイル名は MutualAction.java とする
ソースファイルの先頭に、 そのシミュレーションのタイトルと、 どのような内容かを説明する文章をコメントの形式で書いておくこと。
例えば、つぎのようなシミュレーションが考えられる。
- 二人の競争
- 時計の長針と短針が重なる時刻を求める
シミュレーションの対象となる「もの」のクラスを定義し、 インスタンスを2つ作ることになる。