【转载至】:http://blog.csdn.net/morixinguan/
//随机生成双色球号码
//案例:6颗红球(33选1) 1颗蓝球(16选1)
代码实现如下:
- import java.util.Random;
- import java.util.Arrays;
- //包含Arrays
- public class HelloWorld {
- public static void main(String[] args){
- String[] getball = getBalls();
- System.out.println(Arrays.toString(getball));
- }
- public static String[] getBalls()
- {
- //随机生成双色球号码
- //案例:6颗红球(33选1) 1颗蓝球(16选1)
- String []pool = {
- ”01”,“02”,“03”,“04”,“05”,“06”,“07”,“08”,
- ”09”,“10”,“11”,“12”,“13”,“14”,“15”,“16”,
- ”17”,“18”,“19”,“20”,“21”,“22”,“23”,“24”,
- ”25”,“26”,“27”,“28”,“29”,“30”,“31”,“32”,“33”
- };
- //用一个数组存放6个蓝色的球
- String[] balls = new String[6];
- int length = 0 ;
- //从pool数组中随机选取6个球,放入数组中,并且不能有重复
- /
- 1、如何随机取
- Random r = new Random();
- r.nextInt(n); //取到0到n之间的随机数
- 2、如果不重复
- 一个下标的球被使用我们给它加个标识
- boolean[] flag = new bootlean[pool.length];数组中元素默认为false
- /
- boolean[] used = new boolean[pool.length];
- Random r = new Random();
- while(true){
- int index = r.nextInt(pool.length);
- //说明该下标已经被使用过
- if(used[index])
- continue ; //结束本次循环,继续下一次循环
- balls[length++] = pool[index];//把选中的球放入球数组
- used[index] = true ;//把选中的球标识为已经使用过。
- if(length == balls.length) //如果下标等于6,证明选完了
- break ;
- }
- //红色的球已经选完了
- Arrays.sort(balls);
- //扩容一个空间,最后一个放蓝球
- //balls = Arrays.copyOf(balls,balls.length+1); 不知道为什么不行,疑惑中
- String []str = new String[balls.length+1]; //所以我只能使用这种老土的方法来实现数组扩容了
- for(int i = 0 ; i < balls.length ; i++)
- str[i] = balls[i];
- balls = str ;
- //balls = Arrays.copyOf(balls,balls.length+1);
- //蓝色的球16选1即可
- balls[balls.length-1] = pool[r.nextInt(16)];
- return balls ;
- }
- }