疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java 两个简单的抽奖算法


 

   

  不多说了,代码不多,算法也简单

  方法一:

  /**

  * 获取中奖号的算法,方法会在每次抽到一个中奖号后,将最后一个号码填充到此位置,实现不重复抽取.

  *

 

  * 经过多次测试,此方法在大数据时速度略优于{@link #booleans()},小数据时差距可忽略

  *

  * @return

  */

  public int[] deleteLast(){

  if(prize <= 0) return new int[0];

  int[] nums = new int[max];

  for(int i=0; i

  nums[i] = i+1;

  }

  int[] prizes = new int[prize];

  int zj = 0;

  for(int i=0; i

  zj = (int) (Math.random() * max);

  prizes[i] = nums[zj];

  nums[zj] = nums[--max];

  }

  return prizes;

  }

  方法二:

  /**

  * 获取中奖号的算法,方法设置原始数组的值为boolean型,抽中过将值设为true,实现不重复抽取.

 

  *

 

  * 经过多次测试,此方法在大数据时速度略差于{@link #deleteLast()},小数据时差距可忽略

  *

  * @return

  */

  public int[] booleans(){

  if(prize <= 0) return new int[0];

  boolean[] nums = new boolean[max];

  for(int i=0; i

  nums[i] = false;

  }

  int[] prizes = new int[prize];

  int zjCount = 0;

  int zj = 0;

  while(zjCount < prize){

  zj = (int) (Math.random() * max);

  if(!nums[zj]){

  nums[zj] = true;

  prizes[zjCount++] = zj;

  }

  }

  return prizes;

  }