如何确保在android JAVA中耗尽所有指定的可能值之前,random不会重复该值
如何确保Random在第二次调用某个值之前耗尽了所有可能的值,以确保在播放完所有值之前不会再次重复某首歌曲如何确保在android JAVA中耗尽所有指定的可能值之前,random不会重复该值,android,Android,如何确保Random在第二次调用某个值之前耗尽了所有可能的值,以确保在播放完所有值之前不会再次重复某首歌曲 MediaPlayer mp; Random rand= new Random(); int iterator; int songs[][]={{R.raw.twenty,R.raw.forty,R.raw.twentyfive},{20,40,25}}; play.setOnClickListener(new OnClickListener(){ @Override pu
MediaPlayer mp;
Random rand= new Random();
int iterator;
int songs[][]={{R.raw.twenty,R.raw.forty,R.raw.twentyfive},{20,40,25}};
play.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
iterator=rand.nextInt(3);
mp=MediaPlayer.create(MainActivity.this, songs[0][iterator]);
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
mp.start();
}
});
我只提供一个算法
int array[] = new int[100];
for(int i = 0; i < 100; i++)
array[i] = i;
int rdmCode = getRandomCode(0, array.size);
array.remove(rdmCode);
// use the rdmCode;
getRandomCode应该从0到array.size中选择一个随机数。然后从数组中删除此数字。下次您从数组中随机选取一个数字时,将不会得到重复的数字。我会将歌曲放在数组列表中,然后调用 收藏。Shufflesonglist; 随机r=新随机; positionrandomsong=r.nextInSongsList.size; songtoplay=songlist.getpositionrandom; //然后播放歌曲: songtoplay songlist.removepositionrandom songlist应该是列表originalsongslist上所有歌曲的副本,并用if songlist.isempty将这些歌曲从originalsongslist复制到songlist
希望给你一个主意。先洗牌歌曲列表,然后按洗牌顺序播放。
//Store paths of all the songs in a arrayList MusicFiles then initializeRandomArr
ArrayList<String > MusicFiles = null;
ArrayList<Integer > arrIndicies;
void initializeRandomArr()
{
int totalSize=MusicFiles.size();
arrIndicies = new ArrayList<Integer>();
for(int i=0; i<totalSize;i++)
arrIndicies.add(i);
}
int RandomAccess()
{
Random r = new Random();
int randomOutput = r.nextInt(arrIndicies.size());
arrIndicies.remove(randomOutput);
return randomOutput;
}
void playRandomSong()
{
if(arrIndicies.size()!=0)
{
playSong(MusicFiles.get(RandomAccess()));
}
else
{
initializeRandomArr();
playSong(MusicFiles.get(RandomAccess()));
}
}