0

两种可能的解决方案,但哪一种?还是有更好的?

我有一个 MP3Track 类,其中包含成员:​​曲目编号(int)、曲目名称(字符串)、艺术家字符串)、faourites(布尔值)等。我的目录类包含两个 ArrayList,一个包含所有曲目(vectorMain),另一个包含 fovuorites (vectorFav) 是主目录中曲目的副本。

我希望用户可以选择交换两个轨道号(在两个阵列中都是唯一的)。

(解决方案 1)我添加了以下代码来执行此操作并且它可以工作(如果它们存在 - ATM)但它看起来相当麻烦。Surly 一定有更好的解决方案吗?

getMainIndex() - 返回给定轨道号的 ArrayList 中的索引位置或 -1。

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

(解决方案2)

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();
    MP3Track mp31 = null;
    MP3Track mp32 = null;
    //But are these references or not?????
    for(MP3Track track : vectorMain){
        if(track.getTrackNo() == t1){
            mp31 = vectorMain.get(getMainIndex(t1));
        }
        if(track.getTrackNo() == t2){
            mp32 = vectorMain.get(getMainIndex(t2));
        }
    }
    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)));

}

这更优雅,但对我来说也很麻烦。或者我在这里缺少什么?我撞墙了!!

我是 Java 新手,因此欢迎任何建议、改进和评论。

非常感谢

4

1 回答 1

0

这对我来说似乎过于复杂。

您应该有两个单独的类:Catalog用于可用的 MP3 世界。收藏夹似乎应该与User. 多个用户都应该能够从 中共享一个收藏夹Catalog,但Catalog班级不需要对此一无所知。

如果您不使用 IO,此方法会更有用。将其移动到驱动程序类中,然后将所需的内容传递给方法。

于 2013-11-11T00:56:18.633 回答