Java 双色球随机选号

2020-11-24   329 次阅读


package gzj.day05;

import java.util.Arrays;
import java.util.Random;

public class DoubleColorBalls_v1 {
	/**
	 * @Description
	 * 双色球随机选号
	 * 1.红球:01-33随机选取出6个,不能重复
	 *   按照顺序排序(升序)
	 * 2.篮球:01-16随机取出1个
	 */
	public static void main(String[] args) {
		int howMuch = 1; //选1组
		
		System.out.println("红球\t\t\t蓝球");
		
		for(int i = 0; i < howMuch; i++) { 
			String numbers = getNumbers(); // 获取号码
			System.out.println(numbers);
		}
	}
	
	/**
	 * 产生一组双色球选号
	 * @return 一组号码
	 */
	public static String getNumbers() {
		//33选6
		int[] exist = new int[6]; //默认全0
		for (int i = 0; i < exist.length; i++) {
			int ball = getABall(33,exist); //选球
			exist[i] = ball; //暂存已选的球
		}
		Arrays.sort(exist);
		//16选1
		int specificBall = getABall(16,null);
		
		//字符串拼接
		String numbers = "";
		for (int i = 0; i < exist.length; i++) {
			// 如果 exist[i] 小于 0,则输出 0+exist[i] 的值,否则直接输出 exist[i] 的值
			String num = exist[i] < 10 ? "0" + exist[i] : "" + exist[i];
			if (i == 0) {
				numbers = numbers + num;
			}else {
				numbers = numbers + ("," + num);
			}
		}
		// 先输出红球好吗,然后输出一个制表符,然后输出篮球号码
		numbers = numbers + "\t" + (specificBall < 10 ? "0" + specificBall : ""+ specificBall);
		return numbers;
	}
	
	/**
     * 摇出一个号码
     * @param total 球总数
     * @param exist 已经选出的球
     * @return 一个新号码
     */
    private static int getABall(int total,int[] exist){
        Random random = new Random();
        int ball = random.nextInt(total)+1;
        while(true){
            if(contains(exist,ball)){ //判断是否重复
                ball = random.nextInt(total)+1;
            }else{
                break; //取到了新球,结束
            }
        }
        return ball;
    }
    
    /**
     * 判断数组是否包含某个元素
     * @param array 数组
     * @param value 元素
     * @return 是否存在
     */
    private static boolean contains(int[] array,int value){
        boolean have = false;
        if(array == null){
            return false;
        }
        for(int i=0;i<array.length;i++){
            if(array[i] == value){
                have = true;
                break;
            }
        }
        return have;
    }
}

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

 海若有因