双色球数生成-java(idea2019)

规则:

前六位 红球 1-33 不能重复 升序排列

最后一位 蓝球 1-16 可以和前六位重复

思想:

一、为了生成前6位数不重复:

方法1.每生成一位随机数都与数组中现有的随机数进行比较:重复,重新生成;不重复,生成下一个随机数;

方法2.先生成6位随机数,进行排序;查找是否有相同的数字:如果有,两个相同的数字一定左右相邻,将相同的两个替换一个,然后在进行排序,进行查找(感觉是递归的过程,此文章并未用递归算法);如果没有,继续相互比较,直到没有相同的数字。

二、生成第7位数

算法实现:

方法1:

package methodDemo;

import java.util.Arrays;

public class Test11 {
    /*双色球彩票
    * 双色球规则:
前六位  红球 1-33 不能重复 升序排列、
最后一位 蓝球  1-16 可以与前六位重复
*/
    public static void main(String[] args) {
        int lottery[]=getlottery();
        System.out.println("双色球是:");
        System.out.println(Arrays.toString(lottery));

    }
    public static int[] getlottery(){
        int lottery[]=new int[6];
        for(int i=0;i<6;i++){
            /*生成随机数*/
            int num=(int)(Math.random()*33+1);
            lottery[i]=num;
        }
        int lottery1[]=bubbleSort(lottery);
        lottery1=outrepeat(lottery1);
        int finalLotterty[] = new int[7];
        //数组的复制:
//        for(int i=0;i<6;i++){
//            finalLotterty[i]=lottery1[i];
//
//        }
        System.arraycopy(lottery,0,finalLotterty,0,6);
        //处理第7位
        finalLotterty[6]=(int)(Math.random()*16+1);
        return finalLotterty;

    }
    /*冒泡排序*/
    public static int[] bubbleSort(int arr[]){
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        return arr;
    }
    /*查找是否有重复数字*/
    public static int[] outrepeat(int arr[]){

      int i=0;
        while(i<arr.length-1){
            if(arr[i]!=arr[i+1]){
                i++;
            }else
            {
                int num=(int)(Math.random()*33+1);
                arr[i]=num;
                arr=bubbleSort(arr);
                i=0;

            }
        }
        return arr;
    }
}

方法2:

package methodDemo;

import java.util.Arrays;

public class Test12 {
    public static void main(String[] args) {
        int lottery[]=getLottery();
        System.out.println(Arrays.toString(lottery));

    }

    /**
     *
     * @return 返回双色球数
     */
    public static int[] getLottery(){
        int lottery[]=new int[6];
        for (int i=0;i<6;i++){
            int num=(int )(Math.random()*33+1);

            while(isContain(lottery,num)){
                num=(int )(Math.random()*33+1);
            }
            lottery[i]=num;

        }
         int finalLottery[]=new int[7];
        System.arraycopy(lottery,0,finalLottery,0,6);
        finalLottery[6]=(int)(Math.random()*16+1);
        return finalLottery;
    }

    /**
     *该方法用于判定给定的数组中是否包含指定的元素
     * @param arr 给定的数组
     * @param b   想要判断的元素
     * @return  当给定的数组中含有指定的元素时返回true 否则返回false
     */
    public static boolean isContain(int arr[],int b){
        boolean x=false;
        for(int m:arr){
            if(b==m){
                x=true;
                break;
            }
        }
        return x;

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值