- package cn.rand;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Random;
- /**
- * Feb 9, 2009
- * version 1.1 *
- */
- public class Test {
- public static HashMap<String, String> map=new HashMap<String, String>();
- /**
- * 数据源
- * @return
- */
- public ArrayList<String> getDataList(){
- ArrayList<String> al=new ArrayList<String>();
- al.add("测试");
- al.add("数据源");
- al.add("随机数");
- al.add("获取");
- al.add("网页");
- al.add("娱乐");
- al.add("主题");
- al.add("歌曲");
- return al;
- }
- /**
- * 获取不大于count的随机数
- * @param count
- * @return
- */
- public int getStart(int count){
- int result=0;
- //进行取模(%)操作是为了防止随机数大于total
- result=(int)(Math.round(Math.random()*count))%count;
- return result;
- }
- /**
- * 轮转,按顺序随机获取count个值
- * @param count 要取个数,个数不足从头取
- * @return
- */
- public ArrayList<String> getScroll(int count){
- ArrayList<String> result=new ArrayList<String>();
- ArrayList<String> data=this.getDataList();
- int total=data.size();
- int begin=this.getStart(total);
- System.out.println("begin:"+begin+":total:"+total);
- int curCount=0;
- for(int i=begin;i<total&&curCount<count;i++,curCount++){
- result.add(data.get(i).toString());
- }
- //数量不足时从头开始取
- for(int i=0;i<total&&curCount<count;i++,curCount++){
- result.add(data.get(i).toString());
- }
- return result;
- }
- /**
- * 轮转,随机获取某个数,使其每total次必显示一次 平均出现
- * @return
- */
- public ArrayList<String> getScroll2(){
- ArrayList<String> result=new ArrayList<String>();
- ArrayList<String> data=this.getDataList();
- int total=data.size();
- int begin=this.getStart(total);
- int curCount=0;
- String key="";
- if(map.size()==total){
- map.clear();
- }
- //只显示一个数据
- for(int i=begin;i<total&&curCount<1;i++){
- key=data.get(i).toString();
- if(!map.containsKey(key)){
- curCount++;
- result.add(key);
- map.put(key, key);
- }
- }
- //没有数据时从头开始取
- for(int i=0;i<total&&curCount<1;i++){
- key=data.get(i).toString();
- if(!map.containsKey(key)){
- curCount++;
- result.add(key);
- map.put(key, key);
- }
- }
- return result;
- }
- public static int begin3=0;
- /**
- * 轮询3,按顺序进行轮询
- * @return
- */
- public ArrayList getScroll3(int count){
- ArrayList<String> result=new ArrayList<String>();
- ArrayList<String> data=this.getDataList();
- int total=data.size();
- int curCount=0;
- for(int i=begin3;i<total&&curCount<count;i++,curCount++){
- result.add(data.get(i).toString());
- }
- //数量不足时从头开始取
- for(int i=0;i<total&&curCount<count;i++,curCount++){
- result.add(data.get(i).toString());
- }
- //设置下一次begin开始的位置
- begin3+=count;
- if(begin3>=total){
- begin3=begin3-total;
- }
- return result;
- }
- /**
- * 得到两个数之间的随机数(产生的结果不包括max)
- * @param min
- * @param max
- * @return
- */
- public static float getRandom(int min,int max){
- float result = 0;
- // Random random = new Random();
- // result = (max-min)* random.nextFloat() + min;
- //进行取模(%)操作是为了防止随机数大于max
- result=(float)(Math.random()*max%max);
- if(result<min) result+=min;
- return result;
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- Test test=new Test();
- // ArrayList list=test.getScroll(1);
- // for(int i=0;i<list.size();i++){
- // System.out.println(list.get(i).toString());
- // }
- // for(int i=0;i<8;i++){
- // ArrayList<String> list1=test.getScroll2();
- // for(int j=0;j<list1.size();j++){
- // System.out.println(i+":"+list1.get(j).toString());
- // }
- // }
- for(int i=0;i<2;i++){
- ArrayList<String> list1=test.getScroll3(3);
- for(int j=0;j<list1.size();j++){
- System.out.println(i+":"+list1.get(j).toString());
- }
- }
- }
- }