コンピュータ基礎および演習II

演習問題

解答は

に提出しなさい。クラスファイル (〜.class) は提出しなくてよい。 提出には gFTP 等の ftp ソフトを用いること。

問題1

パソコンを表すクラス 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
$

問題 1-1

メソッド type(入力文字) により、引数で指定した文字が画面に表示されるようにしなさい。 また、メソッド enter() により改行されるようにしなさい。 (メソッド power() は実行しなくてよい)

問題 1-2

電源をon/offするメソッド power を実装(作成)し、 電源が入っていないときにはキーを押しても反応しないようにしなさい。

ヒント: インスタンス内で電源がonかoffかの状態を保持する必要がある。 boolean 型の変数を属性として用意するとよい。

問題2

CD Player を表すクラス CDPlayer と、 CD を表すクラス CD を定義しなさい。 ファイル名は CDListener.java とし、以下の各小問を解いた最終版を提出すること。

問題 2-1

まず、一枚のCDを表すクラス (class CD) を定義しなさい。 前回の MobileMusicPlayer を作成するときに用いた Music クラスを利用する。 CD に含まれるトラックは Music クラスの配列で表す。 トラック番号は 0 から数えるものとする。

クラス CD には、少なくとも以下の属性、コンストラクタ、メソッドがあるものとする。

ここで定義したクラス CD の使用例は、以下のようになる。

        CD cd = new CD("Pet Sounds", "The Beach Boys", 2);
        Music track0 = new Music("Wouldn't it be nice", "The Beach Boys");
        cd.setTrack(0, track0);
        Music track1 = new Music("God only knows", "The Beach Boys");
        cd.setTrack(1, track1);

なお、クラス Music は前回作成したものをそのまま利用すればよい。 クラス Music の実装例を以下に示しておく。

class Music {
    String name;
    String musician;
    Music(String musicName, String musicianName) {
        name = musicName;
        musician = musicianName;
    }
    String getName() {
        return name;
    }
    String getMusician() {
        return musician;
    }
}

余力のある人は、トラック番号を指定せずに曲を登録できるメソッドも作成しなさい。 最初に登録した曲が 0 曲目、次に登録した曲が 1 曲目、と自動的に割り当てられることになる。

問題 2-2

上で定義した CD を再生することのできる CDプレーヤを表すクラス (class CDPlayer) を定義しなさい。

クラス CDPlayer には、少なくとも以下の属性、コンストラクタ、メソッドがあるものとする。

属性 cd の値が、

となるようにしておけば、CD が入っているかどうかの判定が可能となる。 具体的には、CD が入っていないときには cd = null として null を代入しておく。 CD が入っているときにはその CD のインスタンスを入れておく。 CD が入っているかどうかを調べるには if(cd == null) ... として値が null かどうかを調べればよい。

余力がある人は、矛盾した操作がされたときにエラーを表示するようにしなさい。 例えば、ディスクがすでに入っているのに load しようとしたり、 ディスクが入っていないのに eject しようとした場合がこれに相当する。

クラス CDListener の定義は、例えば以下のようになる。

class CDListener {
    public static void main(String[] args) {
        CDPlayer player = new CDPlayer();
        // Disc 1
        CD cd1 = new CD("Pet Sounds", "The Beach Boys", 2);
        Music track0 = new Music("Wouldn't it be nice", "The Beach Boys");
        cd1.setTrack(0, track0);
        Music track1 = new Music("God only knows", "The Beach Boys");
        cd1.setTrack(1, track1);
        // Disc 2
        CD cd2 = new CD("Penny Lane", "The Beatles", 2);
        cd2.setTrack(0, new Music("Penny Lane", "The Beatles"));
        cd2.setTrack(1, new Music("Strawberry Fields Forever", "The Beatles"));
        // Playing
        player.load(cd1);
        player.play();
        player.play(1);
        player.eject();
        player.load(cd2);
        player.play(0);
        player.play();
        player.eject();
    }
}

実行例:

$ java CDListener
Loaded: "Pet Sounds" by The Beach Boys
 Track 0: Wouldn't it be nice
 Track 1: God only knows
 Track 1: God only knows
Ejected: "Pet Sounds"
Loaded: "Penny Lane" by The Beatles
 Track 0: Penny Lane
 Track 0: Penny Lane
 Track 1: Strawberry Fields Forever
Ejected: "Penny Lane"
$

なお、CD の内容はこの例題や友達とは異なるものにすること。