3

通常の機能をすべて備えた MP3 カタログを作成するタスクが与えられました。MP3_Track、MP3_UserInterface、および Main クラスがあります。

public class MP3_Track implements Comparable<MP3_Track>{

private int trackNo;
private String artistName;
private String albumName;
private String trackLength;

MP3_Track(int no, String artist, String album, String length){
    this.trackNo = no;
    this.artistName = artist;
    this.albumName = album;
    this.trackLength = length;

// setters & getters

@Override
public String toString(){
        return (" Track Number : " + trackNo + "\n Artist Name  : " + artistName + "\n Album Name   : " + albumName +"\n Track Length : " + trackLength);
}

@Override
public int compareTo(MP3_Track aTrack){
    int result;
    try{
        result = artistName.compareTo(aTrack.artistName);
    }
    catch(UnsupportedOperationException e){
        throw new UnsupportedOperationException("Not supported here.");
    }
    return result;
  }
}

私のメインクラスには以下が含まれます:

static void deleteTrack()
static MP3_Track addTrack()
static void moveTrack()
static void exploreTracks()...etc

ユーザーがコンソールで入力した内容に応じて、関連するメソッドのメイン呼び出し。

など: Collections.sort(myTracks); myTracks は MP3_Tracks のコレクションであり、現時点では mt MP3_Track が compareTo() メソッドをオーバーライドしますが、ご覧のとおり、artistName でのみ並べ替えます!!! トラックの並べ替え方法などをユーザーが選択できるようにしたいのですが、MP3_Track にデータ メンバーを配置して、実装する並べ替えの種類にフラグを付けてから、compareTo メソッドにある場合に必要な結果を返すことができるのではないかと考えました。このソリューションはやや面倒に思えますが、私が考えた別の可能性は、おそらくカスタムインターフェイスを実装することでした!!!

巧妙な回避策に関する提案は大歓迎です???

よろしくお願いします、素晴らしいサイトところで..

4

3 に答える 3

4

Collections.sort() メソッドを見る必要があります。Comparator インターフェースの実装を渡すことができ、それを使用してソートします。

例については、http://www.vogella.com/articles/JavaCollections/article.html#collectionssortを参照してください。

于 2013-11-01T21:17:44.277 に答える
3

Collections.sortユーザー入力に基づいてカスタムコンパレータを渡すことができます

例えば ​​ -

if ( "artistName".equals(sortType) ) {
    Collections.sort(myList, new Comparator<MP3_Track>() {
        @Override
        public int compare(MP3_Track track1, MP3_Track track2) {
          // use artist name to compare
        }
    });
 }
 else if ("albumName".equals(sortType) {
   ...
 }
于 2013-11-01T21:18:08.567 に答える
-2

並べ替えの種類ごとに MP3_Track の異なるサブクラスを使用できると思いますが、使用する並べ替えを決定するためにデータ メンバーをチェックするよりも面倒で、実行時の並べ替え方法の切り替えが複雑になります。

正直なところ、データメンバーを使用してどの種類の並べ替えを行うかを決定する際の問題がわかりません。

于 2013-11-01T21:16:19.073 に答える