【发布时间】:2013-11-11 00:47:13
【问题描述】:
两种可能的解决方案,但哪一种?还是有更好的?
我有一个 MP3Track 类,其中包含以下成员:曲目编号 (int)、曲目名称 (String)、艺术家字符串)、faourites (boolean) 等。我的目录类包含两个 ArrayList,一个包含所有曲目 (vectorMain) 和其他包含 fovuorites (vectorFav),它们是主目录中曲目的副本。
我希望用户可以选择交换两个轨道号(在两个数组中都是唯一的)。
(解决方案 1) 我添加了以下代码来执行此操作并且它可以工作(如果它们存在 - 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
(解决方案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 新手,因此对任何建议、改进和 cmets 表示赞赏。
非常感谢
【问题讨论】:
-
这类问题比较适合Code Review。你可能想请版主把它移到那里。
-
首先是我的选择。它看起来更好。 :)