【发布时间】:2013-12-27 13:58:23
【问题描述】:
虽然下面的说明看起来很清楚,但我完全不知道如何实现这段代码。
当代音乐软件最流行的功能之一是能够随机化播放列表中歌曲的顺序——一种称为“随机播放”歌曲的动作。使用下面的伪代码作为指导创建一个 shuffle 方法:
create a new empty arraylist (called newList)
while (there are still songs left)
randomly select the index of one song on the playlist
remove it from the current playlist and place it at the end of newList
songs = newList
提示:使用 Java 库中的 Random 类生成一个随机数。它的方法是: 公共 int nextInt(int n)。 这将返回一个伪随机、均匀分布的 int 值,该值低至 0,高至 n。因此, nextInt(songs.size()) 给你一个随机索引。请记住,每次将随机选择的歌曲添加到 newList 时,歌曲的大小都会减少一首。每次生成随机数时都需要考虑这一点。
这就是我所拥有的导致程序崩溃的原因。我需要帮助从数组中检索歌曲、将其删除并将其放入新的数组列表中。请帮助我!
public int nextInt(int n) {
int index = randomGenerator.nextInt(songs.size());
return index;
}
public void shuffle (){
newList = new ArrayList<Mp3> ();
while (songs.size()>0){
Mp3 song = songs.get(nextInt(songs.size()));
newList.add(song);
System.out.println("new list" + newList);
}
}
【问题讨论】:
-
为什么不简单地使用 Collections.shuffle(list),它会为你打乱列表,然后遍历这个打乱的列表?也就是说,您需要两个列表:原始的、最初的完整列表,您将在每次迭代时从中随机挑选和删除一首歌曲,以及一个最初为空的列表,您将从第一个列表中随机挑选的歌曲填充.您忘记在代码中删除选择的歌曲。
-
@JBNizet 您只需要一个列表,因为“第二个”列表与您播放第一个列表的顺序相同。或者你保留一份清单,每次都重新洗牌。