クラスライブラリ基礎

演習問題

解答は

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

問題1

リスト構造を扱うプログラムを考える。 ArrayList で実装するのが適している例、 LinkedList で実装するのが適している例を、 それぞれ1つ挙げなさい。挙げた理由も述べること。

そもそもリスト構造が適していない例を挙げないよう注意すること。 また、教科書・参考書の例や他の人の解答とは異なるものにすること。

ファイル名は list.txt とする。 ファイルの属性(permission)に注意すること。

問題2

1年後期「プログラミング基礎」において、 複数の曲の中から最も再生時間の長い曲を選ぶプログラムを作成した。 このときにはクラス Music の配列を用いたが、 これを配列ではなくリストを用いたプログラムに変更しなさい。 リストを先頭から見ていくのは一度だけにすること。 なお、最も再生時間の長い曲は 1曲に定まると仮定してよい。

曲を表す Music クラスの属性として、

を用意すること。

メソッド main のあるクラス名は LongestSongSearcher とする。 ファイル名は LongestSongSearcher.java となる。

配列の場合のテンプレートを以下に示す。これをリストに変更して用いること。

class LongestSongSearcher {
    public static void main(String[] args) {
        Music[] songs = new Music[13];
        songs[0] = new Music("Life Begins At The Hop", "XTC", 235);
        songs[1] = new Music("Burning With Optimism's Flame", "XTC", 264);
        songs[2] = new Music("Love At First Sight", "XTC", 190);
        songs[3] = new Music("Respectable Street", "XTC", 231);
        songs[4] = new Music("No Language In Our Lungs", "XTC", 299);
        songs[5] = new Music("This Is Pop", "XTC", 169);
        songs[6] = new Music("Scissors Man", "XTC", 289);
        songs[7] = new Music("Towers Of London", "XTC", 323);
        songs[8] = new Music("Battery Brides", "XTC", 438);
        songs[9] = new Music("Living Through Another Cuba", "XTC", 209);
        songs[10] = new Music("Generals And Majors", "XTC", 268);
        songs[11] = new Music("Making Plans For Nigel", "XTC", 269);
        songs[12] = new Music("Are You Receiving Me?", "XTC", 198);

        Music longestSong;
        // もっとも再生時間の長い曲を探し、その曲名とアーティスト名を表示
    }
}

class Music {
    private String title;
    private String artist;
    private int time;        // [秒]

    ....

}

問題3

問題2のプログラムを修正し、 最も再生時間の長い曲が複数曲ある場合でも正しく動作するようにしなさい。 該当する曲が複数ある場合、 最後に表示する曲数も複数になる。 リストを先頭から見ていくのは一度だけにすること(結果表示は除く)。 ファイル名は LongestSongsSearcher.java とする。

ヒント: 結果を保持するのにもリストを用いるとよい。

なお、コンパイルが通ったからといって喜ばず、 同一の長さの曲をいくつか用意して動作確認をすること。

問題4

携帯音楽プレーヤを表す MobileMusicPlayer クラスを作成しなさい。 プレーヤはアルバム(Album)単位で曲を管理することとし、 アルバムは複数の曲(Music)を持つことができるものとする。 main メソッドを持つクラスは MobileMusicListener とする (ファイルとしては MobileMusicListener.java が必須で、 その他のクラスを別ファイルにするかは任意とする)。

クラス図作成し提出すること。 ファイル名は MobileMusicListener.dia, MobileMusicListener.png とする。

以下の2つの機能を実装すること。

ただし、再生は画面にアーティスト名、曲名を出力することで代替する。 上記 2つの機能の実現が確認できる main メソッド (アルバムの内容も含む) を用意すること。

なお、考えられるクラス構成は 1通りではない。 アルバムが曲を持つのと同時に、 携帯音楽プレーヤが直接曲を持つ設計も考えられる。

初期化のヒント: アルバムが曲を持つ場合、 曲を生成してアルバムに登録し、そのアルバムをプレーヤに登録するとよい。