之前做音乐播放器的时候需要设计播放模式,其中的随机播放模式,虽然可以通过(int)(Math.random()*Max_Value)这种方法产生一个随机数,可是考虑到这是音乐播放器,在随机播放模式下,点击播放上一曲,得到的很有可能不是之前播放的那首音乐,而是新的一个随机数所指定的音乐,因此,我作了一些思考。大体上,能实现我的需求:
public class NRandom { /** * 对给定数目的自0开始步长为1的数字序列进行乱序 * * @param no * 给定数目 * @return 乱序后的数组 */ public static int[] getSequence(int no) { int[] sequence = new int[no]; for (int i = 0; i < no; i++) { sequence[i] = i; } Random random = new Random(); for (int i = 0; i < no; i++) { int p = random.nextInt(no); int tmp = sequence[i]; sequence[i] = sequence[p]; sequence[p] = tmp; } random = null; return sequence; } /** * @param array * 被检索的数据源 * @param key * 检索的数据 * @return */ public static int getIndex(int array[], int key) { for (int i = 0; i < array.length; i++) { if (array[i] == key) return i; } return -1; } }
当使用上类的静态方法getSequence(int)获取一个随即序列后,如:从1到5的随机序列({3,4,2,1,5}或{4,5,2,3,1}或{2,5,1,4,3}等等),只用再次调用该方法才会产生新的随机序列。然后静态方法getIndex(int[],int)的作用是顺序查找指定值在序列中的位置,如果不存在则返回-1.
以上就是我解决随机播放模式的关键类,谢谢阅读。
转载请注明出处:http://blog.csdn.net/bcai2/article/details/39250343。