1. package cn.rand;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.Random;  
  6.   
  7. /** 
  8.  * Feb 9, 2009  
  9.  * version 1.1 * 
  10.  */  
  11.   
  12. public class Test {  
  13.     public static HashMap<String, String> map=new HashMap<String, String>();  
  14.     /** 
  15.      * 数据源 
  16.      * @return 
  17.      */  
  18.     public ArrayList<String> getDataList(){  
  19.         ArrayList<String> al=new ArrayList<String>();  
  20.         al.add("测试");  
  21.         al.add("数据源");  
  22.         al.add("随机数");  
  23.         al.add("获取");  
  24.         al.add("网页");  
  25.         al.add("娱乐");  
  26.         al.add("主题");  
  27.         al.add("歌曲");  
  28.         return al;  
  29.     }  
  30.       
  31.     /** 
  32.      * 获取不大于count的随机数 
  33.      * @param count 
  34.      * @return 
  35.      */  
  36.     public int getStart(int count){  
  37.         int result=0;  
  38.         //进行取模(%)操作是为了防止随机数大于total  
  39.         result=(int)(Math.round(Math.random()*count))%count;  
  40.         return result;  
  41.     }  
  42.       
  43.     /** 
  44.      * 轮转,按顺序随机获取count个值 
  45.      * @param count 要取个数,个数不足从头取 
  46.      * @return 
  47.      */  
  48.     public ArrayList<String> getScroll(int count){  
  49.         ArrayList<String> result=new ArrayList<String>();  
  50.         ArrayList<String> data=this.getDataList();  
  51.         int total=data.size();  
  52.         int begin=this.getStart(total);  
  53.         System.out.println("begin:"+begin+":total:"+total);  
  54.         int curCount=0;       
  55.         for(int i=begin;i<total&&curCount<count;i++,curCount++){  
  56.             result.add(data.get(i).toString());               
  57.         }  
  58.         //数量不足时从头开始取  
  59.         for(int i=0;i<total&&curCount<count;i++,curCount++){  
  60.             result.add(data.get(i).toString());   
  61.         }  
  62.           
  63.         return result;  
  64.     }  
  65.       
  66.     /** 
  67.      * 轮转,随机获取某个数,使其每total次必显示一次 平均出现 
  68.      * @return 
  69.      */  
  70.     public ArrayList<String> getScroll2(){  
  71.         ArrayList<String> result=new ArrayList<String>();  
  72.         ArrayList<String> data=this.getDataList();  
  73.         int total=data.size();  
  74.         int begin=this.getStart(total);  
  75.         int curCount=0;  
  76.         String key="";  
  77.         if(map.size()==total){  
  78.             map.clear();  
  79.         }  
  80.         //只显示一个数据  
  81.         for(int i=begin;i<total&&curCount<1;i++){  
  82.             key=data.get(i).toString();  
  83.             if(!map.containsKey(key)){  
  84.                 curCount++;  
  85.                 result.add(key);  
  86.                 map.put(key, key);  
  87.             }  
  88.         }  
  89.         //没有数据时从头开始取  
  90.         for(int i=0;i<total&&curCount<1;i++){  
  91.             key=data.get(i).toString();  
  92.             if(!map.containsKey(key)){  
  93.                 curCount++;  
  94.                 result.add(key);  
  95.                 map.put(key, key);  
  96.             }  
  97.         }         
  98.         return result;  
  99.     }  
  100.       
  101.       
  102.     public static int begin3=0;  
  103.     /** 
  104.      * 轮询3,按顺序进行轮询 
  105.      * @return 
  106.      */  
  107.     public ArrayList getScroll3(int count){  
  108.         ArrayList<String> result=new ArrayList<String>();  
  109.         ArrayList<String> data=this.getDataList();  
  110.           
  111.         int total=data.size();  
  112.         int curCount=0;       
  113.         for(int i=begin3;i<total&&curCount<count;i++,curCount++){  
  114.             result.add(data.get(i).toString());               
  115.         }  
  116.         //数量不足时从头开始取  
  117.         for(int i=0;i<total&&curCount<count;i++,curCount++){  
  118.             result.add(data.get(i).toString());   
  119.         }  
  120.         //设置下一次begin开始的位置  
  121.         begin3+=count;  
  122.         if(begin3>=total){  
  123.             begin3=begin3-total;  
  124.         }  
  125.         return result;  
  126.     }  
  127.       
  128.       
  129.       
  130.     /** 
  131.      * 得到两个数之间的随机数(产生的结果不包括max) 
  132.      * @param min 
  133.      * @param max 
  134.      * @return 
  135.      */  
  136.     public static float getRandom(int min,int max){  
  137.         float result = 0;  
  138. //      Random random = new Random();  
  139. //      result = (max-min)* random.nextFloat() + min;  
  140.         //进行取模(%)操作是为了防止随机数大于max  
  141.         result=(float)(Math.random()*max%max);  
  142.         if(result<min) result+=min;  
  143.         return result;  
  144.     }  
  145.       
  146.       
  147.       
  148.     /** 
  149.      * @param args 
  150.      */  
  151.     public static void main(String[] args) {  
  152.         Test test=new Test();  
  153. //      ArrayList list=test.getScroll(1);  
  154. //      for(int i=0;i<list.size();i++){  
  155. //          System.out.println(list.get(i).toString());  
  156. //      }  
  157. //      for(int i=0;i<8;i++){              
  158. //          ArrayList<String> list1=test.getScroll2();  
  159. //          for(int j=0;j<list1.size();j++){               
  160. //              System.out.println(i+":"+list1.get(j).toString());  
  161. //          }  
  162. //      }  
  163.           
  164.         for(int i=0;i<2;i++){              
  165.             ArrayList<String> list1=test.getScroll3(3);  
  166.             for(int j=0;j<list1.size();j++){               
  167.                 System.out.println(i+":"+list1.get(j).toString());  
  168.             }  
  169.         }  
  170.           
  171.           
  172.     }     
  173.       
  174. }  
 
posted on 2020-09-10 16:42  DamonLay  阅读(411)  评论(0编辑  收藏  举报