java 随机数的相关有关问题,求大神们帮帮忙!非常感谢
java 随机数的相关问题,求大神们帮帮忙!非常感谢!
需求是这样的,有一个数组或者list集合,里面存放着很多五位数的ID,例如:35178 这样的数据。现在我要不间断的随机去里面取一个ID出来,而且取出过的ID就不能再进行随机,只能全部都随机完一遍,再重复重新进行随机。以此类推。请问这样该怎么去做?我想到的就是打比方有两个篮子,一个篮子里装满了苹果,一个是空的,然后一个一个拿到空的篮子里,拿完了之后再倒回之前的篮子里进行再一个一个拿。不知这样的思路对不对?希望各位帮帮我!
------解决思路----------------------
------解决思路----------------------
执着的妹子么
,你来这里问题其实也就是百度算法嘛,本质没区别,你还不如百度,思路是这样,从一堆数组里面拿出一个数判断hashset里面是否有,没有就存入hashset,直到hashset的size和之前的一样,不过这样的算法冗余度较长
需求是这样的,有一个数组或者list集合,里面存放着很多五位数的ID,例如:35178 这样的数据。现在我要不间断的随机去里面取一个ID出来,而且取出过的ID就不能再进行随机,只能全部都随机完一遍,再重复重新进行随机。以此类推。请问这样该怎么去做?我想到的就是打比方有两个篮子,一个篮子里装满了苹果,一个是空的,然后一个一个拿到空的篮子里,拿完了之后再倒回之前的篮子里进行再一个一个拿。不知这样的思路对不对?希望各位帮帮我!
------解决思路----------------------
private ArrayList<Integer> mdlist = new ArrayList<Integer>();
private int postion = 0;//下标
HashMap<Integer,Integer> historyMap= new HashMap<Integer,Integer>();
private int getRandomNum() {
int index = 0;
//先清空集合
if(mdlist.size()>0){
mdlist.clear();
}
//循环播放列表获取所有歌曲的ID
for (int i = 0; i < musicList.size(); i++) {
mdlist.add(musicList.get(i).getId());
}
//如果都取完了,重置一下
if (historyMap.size() == mdlist.size()) {
historyMap.clear();
}
//如果列表只有两首或者一首歌曲
if (musicList.size() < 2) {
//index = mdlist.get(0);
}else{
int did = MyApplication.getSharedPreferences();//获取当前播放的歌曲ID
while (true) {
index = random();//获取随机数
if (!historyMap.containsKey(index)) {
historyMap.put(index ,index );
break;
}
// if(index != did){
// break;
// }
}
}
//设置当前播放歌曲
for (int i = 0; i < musicList.size(); i++) {
if(musicList.get(i).getId()==index){
MyApplication.saveSharedPreferences(index);
MyApplication.setCurrentMusic(musicList.get(i));
break;
}
}
return index;
}
/**获取随机歌曲ID*/
public int random(){
postion = random.nextInt(mdlist.size());//根据集合的size来设置随机范围
return mdlist.get(postion);//返回随机歌曲ID
}
你试试吧
------解决思路----------------------
执着的妹子么