如何确保在android JAVA中耗尽所有指定的可能值之前,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

如何确保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
 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()));
        }
    }