编程语言
首页 > 编程语言> > [Java] 双色球(数组和 HashSet)

[Java] 双色球(数组和 HashSet)

作者:互联网

标题


1. 双色球投注开奖小程序

a. 获取用户输入

红球:1-33中选择6个。(默认用户输入的号码不会重复)
蓝球:1-16中选择1个。

b. 随机生成中奖号码

1-33 中随机生成6个数,不能重复。
1-16 中随机生成1个数。

c. 中奖规则

红球一共6个,从1-33中抽取,六个互相不重复。
然后蓝球是从1-16中抽取一个数字,这整个组成的双色球开奖号码。

一等奖(6+1):红球33选6,蓝球16选1;
二等奖(6+0):红球33选6;
三等奖(5+1):红球33选5,蓝球16选1;
四等奖(5+0、4+1):红球33选5 或者 红球33选4,蓝球16选1;
五等奖(4+0、3+1):红球33选4 或者 红球33选3,蓝球16选1;
六等奖(2+1、1+1、0+1):红球33选2,蓝球16选1 或者 红球33选1,蓝球16选1 或者蓝球16选1;

2. Java 实现

a. 方法1. Array

package ColorBall.src.array;

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

/*
 * 主界面
 */
public class test {
    public static void main(String[] args) {
        //红球下注
        int[] buyRedBalls = buyRedBalls();
        //蓝球下注
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入下注的蓝球号码(1-16):");
        int buyBlue = sc.nextInt();

        //红球开奖号码
        int[] redBalls = getRedBalls();
        //蓝球开奖号码
        Random r = new Random();
        int blue = r.nextInt(16) + 1;

        //显示下注号码
        System.out.println("您下注的红球号码为:" + Arrays.toString(buyRedBalls));
        System.out.println("您下注的蓝球号码为:" + buyBlue);
        //显示开奖号码:
        System.out.println("开奖的红球号码为:" + Arrays.toString(redBalls));
        System.out.println("开奖的蓝球号码为:" + blue);

        //统计红球中奖个数
        int redCount = checkBalls(redBalls, buyRedBalls);
        System.out.println("中奖的红球个数:" + redCount);
        //统计蓝球中奖个数
        int blueCount = buyBlue == blue ? 1 : 0;
        System.out.println("中奖的蓝球个数:" + blueCount);

        //统计中奖结果
        /*
        一等奖(6+1):红球33选6,蓝球16选1;
        二等奖(6+0):红球33选6;
        三等奖(5+1):红球33选5,蓝球16选1;
        四等奖(5+0、4+1):红球33选5 或者 红球33选4,蓝球16选1;
        五等奖(4+0、3+1):红球33选4 或者 红球33选3,蓝球16选1;
        六等奖(2+1、1+1、0+1):红球33选2,蓝球16选1 或者 红球33选1,蓝球16选1 或者蓝球16选1;
         */
        if (redCount == 6 && blueCount == 1) {
            System.out.println("恭喜你中了一等奖");
        } else if (redCount == 6) {
            System.out.println("恭喜你中了二等奖");
        } else if (redCount == 5 && blueCount == 1) {
            System.out.println("恭喜你中了三等奖");
        } else if (redCount == 5 || (redCount == 4 && blueCount == 1)) {
            System.out.println("恭喜你中了四等奖");
        } else if (redCount == 4 || (redCount == 3 && blueCount == 1)) {
            System.out.println("恭喜你中了五等奖");
        } else if ((redCount == 2 && blueCount == 1) || (redCount == 1 && blueCount == 1) || blueCount == 1) {
            System.out.println("恭喜你中了六等奖");
        } else {
            System.out.println("感谢您为福利事业做出的贡献!");
        }
    }

    //统计红球中奖个数
    public static int checkBalls(int[] redBalls, int[] buyBalls) {
        int count = 0;
        for (int i = 0; i < buyBalls.length; i++) {
            for (int j = 0; j < redBalls.length; j++) {
                if (buyBalls[i] == redBalls[j]) {
                    count++;
                }
            }
        }
        return count;
    }

    //模拟用户下注红球的过程
    public static int[] buyRedBalls() {
        int[] arr = new int[6];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第" + (i + 1) + "个红球(1-33):");
            arr[i] = sc.nextInt();
        }
        //排序(方便查看)
        Arrays.sort(arr);
        return arr;
    }

    //随机生成1-33之间的不重复的6个整数(红球的开奖号码)
    public static int[] getRedBalls() {
        int[] arr = new int[6];
        Random r = new Random();
        int index = 0;
        //为第一个元素赋值
        arr[index] = r.nextInt(33) + 1;
        wc:
        while (true) {
            //生成随机数
            int num = r.nextInt(33) + 1;
            //判断num是否重复
            for (int i = 0; i <= index; i++) {
                if (num == arr[i]) {
                    continue wc;
                }
            }
            //如果执行到这里,说明不重复,存到数组中
            arr[++index] = num;
            //如果index为5,说明6个元素全部存满
            if (index == 5) {
                break wc;
            }
        }
        //排序(方便查看)
        Arrays.sort(arr);
        //返回数组
        return arr;
    }
}

b. 方法2. HashSet

i. main

package ColorBall.src.hashset;

import java.util.HashSet;

/*
 * 主界面, 测试方法
 */
public class test {
    public static void main(String[] args) {
        //下注
        Ticket t = new Ticket();
        t.buyTicket();
        DoubleBall db = new DoubleBall();
        db.randomNum();
        //查看结果
        db.show();
        //开奖
        t.showTicket();
        showResult(db,t);
    }

    //兑奖的过程
    public static void showResult(DoubleBall db, Ticket t){
        //开奖的红球
        HashSet<Integer> redBalls = db.getRedBalls();

        //下注的红球
        HashSet<Integer> redNums = t.getRedNums();

        //统计红球的中奖个数
        int redCount = 0;
        for(Integer num :redNums){
            boolean flag = redBalls.contains(num);
            if(flag){
                redCount++;
            }
        }

        //统计蓝球的个数
        int blueCount = 0;
        //开奖的蓝球
        Integer blueBall = db.getBlueBall();
        //下注的蓝球
        Integer blueNums = t.getBlueNums();

        if(blueBall==blueNums){
            blueCount=1;
        }

        System.out.println("中奖的红球个数:"+redCount);
        System.out.println("中奖的蓝球个数"+blueCount);

        if(redCount==6 && blueCount==1){
            System.out.println("恭喜你,中了一等奖");

        }else if(redCount==6 && blueCount==0){
            System.out.println("恭喜你,中了二等奖");

        }else if(redCount==5 && blueCount==1){
            System.out.println("恭喜你,中了三等奖");

        }else if(redCount==5 ||( redCount==4 && blueCount==1)){
            System.out.println("恭喜你,中了四等奖");

        }else if(redCount==4 ||( redCount==3 && blueCount==1)){
            System.out.println("恭喜你,中了五等奖");

        }else if((redCount==2 && blueCount==1)||(redCount==1 && blueCount==1) || blueCount==1){
            System.out.println("恭喜你,中了六等奖");
        }else{
            System.out.println("感谢您为福利事业做出的贡献");
        }
    }
}

ii. ticket

package ColorBall.src.hashset;

/*
 * 模拟进行投注(即买票)的操作
 */

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

public class ticket {
    //投注时的红球
    private HashSet<Integer> redNums = new HashSet<>();

    //投注时篮球
    private Integer blueNums;

    public HashSet<Integer> getRedNums() {
        return redNums;
    }

    public Integer getBlueNums() {
        return blueNums;
    }

    //实现用户下注的方法
    public void buyTicket() {
        //控制台录入数据
        //获取键盘输入
        Scanner sc = new Scanner(System.in);
        int i = 1;
        //选号  红球
        while (true) {
            System.out.println("请输入第" + i + "个红球号码:");
            int redNum = sc.nextInt();
            if (redNum >= 1 && redNum <= 33) {
                //放到集合里面
                boolean flag = redNums.add(redNum);
                if (flag) {
                    //添加成功
                    i++;
                    if (i == 7) {
                        break;
                    }
                } else {
                    System.out.println("你输入的号码重复了,请重新输入");
                }
            } else {
                System.out.println("输入的号码无效,请重新输入");
            }
        }

        //选号 蓝球
        while (true) {
            System.out.println("请输入蓝球号码:");
            int num = sc.nextInt();
            if (num >= 1 && num <= 16) {
                blueNums = num;
                break;
            } else {
                System.out.println("输入的号码无效,请重新输入");
            }
        }
    }

    //显示用户下注号码的方法
    public void showTicket() {
        Integer[] arr = new Integer[6];
        redNums.toArray(arr);
        Arrays.sort(arr);
        String s = Arrays.toString(arr);
        System.out.println("下注的红球号码是:" + s);
        System.out.println("下注的蓝球号码是:" + blueNums);
    }
}

iii. doubleBall

package ColorBall.src.hashset;

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

/*
 * 代表双色球开奖的操作
 */
public class doubleBall {
    //红球
    private HashSet<Integer> redBalls = new HashSet<>();

    //篮球
    private Integer blueBall;

    public HashSet<Integer> getRedBalls() {
        return redBalls;
    }

    public Integer getBlueBall() {
        return blueBall;
    }

    //随机产生6个红球和1个蓝球的方法,模拟开奖
    public void randomNum() {
        Random r = new Random();
        //随机产生6个红球 (1-33)之间的6个随机数
        while (true) {
            int num = r.nextInt(33) + 1; //[1-33]
            redBalls.add(num);

            if (redBalls.size() == 6) {
                break;
            }
        }

        //生成1-16之间的数字,蓝球的号码
        blueBall = r.nextInt(16) + 1;
    }

    //显示开奖的号码
    public void show() {
        Integer[] arr = new Integer[6];

        redBalls.toArray(arr);

        //对开奖号码排序
        Arrays.sort(arr);

        String s = Arrays.toString(arr); //Ctrl + 1
        System.out.println("开奖的红球号码是:" + s);
        System.out.println("开奖的蓝球号码是:" + blueBall);
    }
}
Regino 发布了59 篇原创文章 · 获赞 59 · 访问量 1533 私信 关注

标签:双色球,Java,红球,33,HashSet,System,蓝球,println,out
来源: https://blog.csdn.net/Regino/article/details/104522208