雙色球機選算法java實現


雙色球機選算法java實現

一、代碼

package com.hdwang;

import java.util.Random;

/**
 * Created by admin on 2017/1/10.
 * 雙色球機選實現
 */
public class Ssq {

    public static void main(String[] args) {

        int arrayNums = 5; //機選5組
        for(int i=0;i<arrayNums;i++){
            String hm = getYZHM();
            System.out.println(hm);
        }
    }

    /**
     * 產生一組雙色球選號
     * @return 一注號碼
     */
    private static String getYZHM(){
       //33選6
        int[] exist = new int[6]; //默認全0
        for(int i=0;i<6;i++){
            int ball = getABall(33,exist);
            exist[i] = ball; //暫存已選的球
        }
        sort(exist); //排序
        //16選1
        int specialBall = getABall(16,null);

        //拼接字符串
        String hm = "";
        for(int i=0;i<6;i++){
            String num = exist[i] < 10 ? "0"+exist[i] : ""+ exist[i];
            if(i==0){
                hm+= num;
            }else{
                hm+= ","+ num;
            }
        }
        hm += "\t"+(specialBall<10? "0"+specialBall:""+specialBall);
        return hm;
    }

    /**
     * 搖出一個號碼
     * @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 c = false;
        if(array == null){
            return false;
        }
        for(int i=0;i<array.length;i++){
            if(array[i] == value){
                c = true;
                break;
            }
        }
        return c;
    }

    /**
     * 排序
     * @param array 數組
     */
    private static void sort(int[] array){
        for(int i=0;i< array.length-1;i++){ //比多少次
            for(int j= i+1;j<array.length;j++){ //每次循環,將最小數提前
                if(array[i]>array[j]){ //小數冒泡
                    int tmp = array[i];
                    array[i] = array[j];
                    array[j] = tmp;
                }
            }
        }
    }
}

 

 

二、結果

07,09,12,21,28,32 14
13,18,19,27,31,32 12
01,02,05,16,19,25 14
01,04,06,19,23,33 16
09,10,11,16,28,33 10


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM