クラスライブラリ基礎

演習問題

解答は

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

問題1

Webのテキストの Comparable の例では、 曲がタイトルの辞書順にソートされた。 これを辞書順の逆順に並べるよう変更しなさい。 main メソッドのあるクラスのクラス名は ReversedListListener とする。

一度辞書順にしたものを逆順に並べ替えるのは非効率なので避けること。 なお、Collections クラスの reverse(List) メソッドを使うと List を逆順にすることができる。

問題2

Webのテキストの Comparable の例では、 曲がタイトルの辞書順にソートされた。 これを、以下のような順序になるよう変更しなさい。

main メソッドのあるクラスのクラス名は SortedByArtistListListener とする。

問題3

問題2 のプログラムを基に、 各 Music に対して評価を5段階(1,2,3,4,5; 5が最高の評価)でつけられるようにし、 その評価でソートできるようにしなさい。 評価が同一の曲の場合には、問題2の順序で並ぶようにすること。

main メソッドのあるクラスのクラス名は EvaluatedListListener とする。

問題4

先週の問題4と同様の MobileMusicPlayer を考える。 Album に収録されるすべての曲に 5段階の評価がついているとし、 その平均値が Album の評価値であるとする。 その評価値に基づく、MobileMusicPlayer に入っているすべての Album の ランキングを表示するプログラムを作成しなさい。

Music の評価値は 1,2,3,4,5 のいずれか、Album の評価値は実数とする。 ランキングを表示する際には Album の評価値を表示させること。

Comparable、Comparator のどちらを使用してもよい。

main メソッドのあるクラスのクラス名は RankedAlbumListener とする。 main メソッドは例えば以下のようにする。

import java.util.*;

class RankedAlbumListener {
    public static void main(String[] args) {
        MobileMusicPlayer player = new MobileMusicPlayer();

        Album album;

        album = new Album("Tour de France", "Kraftwerk");
        album.add(new Music("Tour de France (Radio Version)", "Kraftwerk", 5));
        album.add(new Music("Tour de France (Kling Klang Analog Mix)", "Kraftwerk", 5));
        album.add(new Music("Tour de France (Remix Francois K.)", "Kraftwerk", 4));
        player.add(album);

        album = new Album("Let's Get Out Of This Country", "Camera Obscura");
        album.add(new Music("Let's Get Out Of This Country", "Camera Obscura", 5));
        album.add(new Music("Lemon Juice And Paper Cuts", "Camera Obscura", 4));
        album.add(new Music("Return To Send Her", "Camera Obscura", 4));
        player.add(album);

        album = new Album("Glider EP", "My Bloody Valentine");
        album.add(new Music("Soon", "My Bloody Valentine", 5));
        album.add(new Music("Glider", "My Bloody Valentine", 4));
        album.add(new Music("Don't Ask Why", "My Bloody Valentine", 5));
        album.add(new Music("Off Your Face", "My Bloody Valentine", 4));
        player.add(album);

        player.showAlbumRanking();
    }
}

ヒント: Album 間の比較をするときに毎回平均をとって評価値を計算するのは無駄です。あらかじめ計算しておきましょう。