1

トラック番号 (int)、トラック名 (String)、アーティスト String)、faourites (boolean) などのメンバーを持つクラス MP3Track があります。私のカタログ クラスには 2 つの ArrayLists が含まれています。 (vectorFav) メイン カタログのトラックのコピーです。

ユーザーが 2 つのトラック番号 (両方のアレイで一意) を交換できるようにしたいと考えています。

これを行うために次のコードを追加しましたが、動作します (存在する場合 - ATM) が、かなり面倒です。もっと良い解決策があるはずです。

getMainIndex() - 指定されたトラック番号または -1 の ArrayList 内のインデックス位置を返します。

public void swapTrack(){
    int t1 = -1, t2 = -1;
    System.out.println(face.getSwapTrackMenu());       
    System.out.print("1) Please enter first track number to swap: ");
    t1 = scan.readInt();                                
    System.out.print("2) Please enter second track number to swap: ");
    t2 = scan.readInt();                                

    if((getMainIndex(t1)!=-1)&&(getMainIndex(t2)!=-1)){
        String s1 = null;
        String s2 = null;
        for(MP3Track track : vectorMain){
            if(track.getTrackNo() == t1){
                s1 = track.getTitle();
            }
            if(track.getTrackNo() == t2){
                s2 = track.getTitle();
            }
        }

        for(MP3Track track : vectorMain){
            if(track.getTitle().equals(s1)){
                track.setTrackNo(t2);
            }
            if(track.getTitle().equals(s2)){
                 track.setTrackNo(t1);
            }
        }

        for(MP3Track track : vectorFav){
            if(track.getTitle().equals(s1)){
                track.setTrackNo(t2);
            }
            if(track.getTitle().equals(s2)){
                track.setTrackNo(t1);
            }
        }
    }
}//End moveTrack

私はJavaが初めてなので、提案、改善、コメントを歓迎します。

どうもありがとう

さて、私は次のことも試しましたが、これはよりエレガントで機能しているようです??? しかし、確かにこれを達成するためのより良い方法はありますか?? 私は何が欠けていますか?ここでレンガの壁にぶち当たりました!

    for(MP3Track track : vectorMain){
        if(track.getTrackNo() == t1){
            mp31 = vectorMain.get(getMainIndex(t1));
            //mp31.setTrackNo(t2);
        }
        if(track.getTrackNo() == t2){
            mp32 = vectorMain.get(getMainIndex(t2));
            //mp32.setTrackNo(t1);
        }
    }
    mp31.setTrackNo(t2);
    mp32.setTrackNo(t1);
    vectorMain.add(vectorMain.remove(getMainIndex(t1)));
    vectorMain.add(vectorMain.remove(getMainIndex(t2)));

    for(MP3Track track : vectorFav){
        if(track.getTrackNo() == t1){
            mp31 = vectorFav.get(getFavIndex(t1));
        }
        if(track.getTrackNo() == t2){
            mp32 = vectorFav.get(getFavIndex(t2));
        }
    }
    mp31.setTrackNo(t2);
    mp32.setTrackNo(t1);
    vectorFav.add(vectorFav.remove(getFavIndex(t1)));
    vectorFav.add(vectorFav.remove(getFavIndex(t2)));

どうもありがとう

4

1 に答える 1

2

「indexOf」を使用する必要があります。これは、オブジェクトのインデックスを取得するための ArrayList のメソッドです。そこからどのように行くかを知っていると思います。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html

于 2013-11-10T22:03:26.833 に答える