package com.heyang;

 /** *//**
* 雙色球搖獎
* @author: 何楊(heyang78@gmail.com)
* @date: 2009-2-20-下午10:52:55
*/
 public class DoubleColorBall {
 public static void main(String[] args) {
int[] ballNumbers=getSevenNumbers();
 for(int i:ballNumbers) {
System.out.print(i+",");
}
}
 /** *//**
* 得到七個隨機數數組
* @return
*/
 public static int[] getSevenNumbers() {
final int arrLength=7;
int[] arr=new int[arrLength];
// 前六個從1-33中選取,如有重復再取一次
 do {
 for(int i=0;i<=arrLength-2;i++) {
arr[i]=getIntgerBetween(33,1);
}
}while(hasDuplicatedItem(arr));
// 最后一個從1-15中選取
arr[6]=getIntgerBetween(15,1);
return arr;
}
 /** *//**
* 位圖法判斷整形數組是否存在重復
* @param arr
* @return
*/
 public static boolean hasDuplicatedItem(int[] arr) {
// 找出數組中最大值
int max=arr[0];
int min=max;
 for(int i:arr) {
 if(max<i) {
max=i;
}
 if(min>i) {
min=i;
}
}
int[] newArr=new int[max-min+1];
 for(int i:arr) {
int index=i-min;
 if(newArr[index]==0) {
// 以前未在此位置存值
newArr[index]=1;
}
 else {
// 以前已經在此位置存值
return true;
}
}
return false;
}

 /** *//**
* 取得max與min之間的一個隨機整數,包括min和max兩值
* @param max
* @param min
* @return
*/
 public static int getIntgerBetween(int max,int min) {
int interval=max-min;
return (int)Math.round((Math.random()*interval))+min;
}
}
|