首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >java学习day3--java小型实战项目双色球系统(100行源代码带你清晰了解双色球系统的原理及其设计)

java学习day3--java小型实战项目双色球系统(100行源代码带你清晰了解双色球系统的原理及其设计)

作者头像
@VON
发布2025-12-17 10:08:07
发布2025-12-17 10:08:07
100
举报

一、前言

java的学习也来到了第三天,基础部分相信大家也已经学完了,不如来一个小型的双色球系统挑战一下自己,看基础知识掌握的如何。相信玩过彩票的读者都了解双色球系统了吧,但是为了照顾像小编一样的小白,在这里还是将双色球的概念给大家做了简短的说明,希望读者们可以根据说明自己先进行尝试,然后在对照源代码。每一个方法的构建都有详细的说明,要仔细进行阅读哦。

基础知识掌握不太好的读者们可以看向这里❥(^_-)↓↓↓

运算符、判断、循环知识点总结

数组、方法知识点总结

二、双色球简要概述

概念

双色球彩票是一种基于随机数学原理的彩票游戏,参与者通过购买彩票,选择自己认为会中奖的号码组合。彩票中包含两组号码:一组红色号码(1至33共33个号码),一组蓝色号码(1至16共16个号码)。每期开奖时,从彩池中随机抽取出一组号码作为中奖号码,彩票购买者若选择的号码组合与中奖号码一致,则有机会赢得不同等级的奖金。

原理

彩票选号

  • 每张彩票由两部分号码组成:红色号码和蓝色号码。购买者需从红色号码中选择 6 个号码,以及从蓝色号码中选择 1 个号码,组成一注彩票。

开奖过程

  • 每周开奖两次(一般为每周二和每周四),开奖时从彩池中随机抽取出一组号码。抽取的号码包括一组红色号码(6个)和一个蓝色号码(1个),共计7个号码。

中奖规则

  • 根据购买者选择的号码与开奖号码的对应情况,决定中奖等级和奖金金额。具体的中奖等级和奖金是根据命中的红色号码数量和蓝色号码是否一致来决定的,不同的组合对应不同的奖金。

随机性保证

  • 双色球的开奖过程是随机的,彩票号码的选取和开奖号码的抽取都是通过专门设计的随机数生成器完成的,确保了公平性和公正性。

奖励规则

三、案例分析

3.1 判断是否重复

代码语言:javascript
复制
//判断是否重复,重复返回true,反之返回false
    public static boolean contains(int []arr,int num){
        for (int i = 0; i < 6; i++) {
            if (arr[i] == num){
                return true;
            }
        }
        return false;
    }
方法实现分析

循环遍历

for (int i = 0; i < 6; i++) { if (arr[i] == num) { return true; } }

  • 使用 for 循环遍历数组 arr 的前 6 个元素(索引从 0 到 5)。
  • 在循环的每次迭代中,检查数组 arr 的第 i 个元素是否等于 num
  • 如果找到数组中有一个元素等于 num,立即返回 true,表示找到了重复元素。

未找到情况

return false;

  • 如果整个循环执行完毕(即遍历了数组的前 6 个元素)仍未找到与 num 相等的元素,则返回 false
  • 这表示数组中不存在与 num 相同的元素,即没有重复。
方法使用说明
  • 这个方法适用于检查一个长度为 6 的整型数组中是否包含指定的整数 num
  • 如果数组中存在与 num 相同的元素,则返回 true;如果数组中不存在 num,则返回 false
  • 调用这个方法可以帮助确定数组中是否有重复元素或者判断特定元素是否在数组中。

注:该方法主要是为了防止红球的数字重复

3.2 设置中奖号码

代码语言:javascript
复制
//中奖的号码
    public static int[] creatnum(){
        int[] arr = new int[7];//用于存放号码
        Random random = new Random();
        for (int i = 0; i < 6;) {//生成6个红球
            int rednum = random.nextInt(33)+1;
            boolean flag = contains(arr,rednum);
            if(!flag){
                arr[i] = rednum;
                i++;
            }
        }
        int bluenum = random.nextInt(10)+1;
        arr[6]=bluenum;
        return arr;
    }
方法实现分析

注:生成随机数的时候别忘了头文件的调用

初始化数组和随机数生成器

int[] arr = new int[7]; // 创建一个长度为 7 的整型数组,用于存放号码

Random random = new Random(); // 创建一个随机数生成器

生成红色号码

代码语言:javascript
复制
for (int i = 0; i < 6;) {  // 循环生成 6 个红色号码
    int rednum = random.nextInt(33) + 1;  // 生成一个随机数作为红色号码,范围是 1 到 33
    boolean flag = contains(arr, rednum);  // 调用 contains 方法判断生成的号码是否已经存在于数组中
    if (!flag) {  // 如果号码不重复
        arr[i] = rednum;  // 将号码存入数组中
        i++;  // 继续生成下一个号码
    }
}
  • for 循环中,生成一个随机数 rednum,范围是 1 到 33。
  • 使用 contains 方法检查数组 arr 中是否已经包含了这个随机生成的红色号码。
  • 如果 rednum 不重复,则将它存入数组 arr 中的当前位置 i,并递增 i

生成蓝色号码

int bluenum = random.nextInt(16) + 1; // 生成一个随机数作为蓝色号码,范围是 1 到 16 arr[6] = bluenum; // 将蓝色号码存入数组的最后一个位置(索引为 6)

  • 生成一个随机数 bluenum,范围是 1 到 16,作为蓝色号码。
  • 将蓝色号码存入数组 arr 的最后一个位置(索引为 6)。

返回结果

return arr; // 返回包含 6 个红色号码和 1 个蓝色号码的整型数组

  • 返回长度为 7 的整型数组 arr,其中包含了生成的 6 个红色号码和 1 个蓝色号码。

3.3 用户输入彩票号码

代码语言:javascript
复制
//用户购买的彩票号码
    public static int[] usernum(){
        int[] arr = new int[7];//用于存放号码
        //用户输入红球
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 6;) {
            System.out.println("请输入第"+(i+1)+"个红球号码");
            int rednum = sc.nextInt();
            //判断是否处于正常范围
            if(rednum>=1 && rednum<=33){
                boolean flag = contains(arr,rednum);
                if(!flag){//不存在
                    arr[i]=rednum;
                    i++;
                }else {
                    System.out.println("当前红球号码已经存在,请重新输入");//存在
                }
            }else {
                System.out.println("当前红球号码超出范围");
            }
        }//输入篮球号码
        System.out.println("请输入篮球号码");
        while(true){
            int bluenum = sc.nextInt();
            if(bluenum>=1 && bluenum<=16) {
                arr[6]=bluenum;
                break;
            }else {
                System.out.println("当前篮球号码超出范围");
            }
        }
        return arr;
    }
方法实现分析

初始化数组和输入对象

int[] arr = new int[7]; // 创建一个长度为 7 的整型数组,用于存放用户输入的号码

Scanner sc = new Scanner(System.in); // 创建一个 Scanner 对象,用于接收用户输入

用户输入红色号码

代码语言:javascript
复制
for (int i = 0; i < 6;) {  // 循环接收 6 个红色号码
    System.out.println("请输入第" + (i + 1) + "个红球号码");
    int rednum = sc.nextInt();  // 接收用户输入的红色号码
    
    if (rednum >= 1 && rednum <= 33) {  // 判断号码是否在合法范围内
        boolean flag = contains(arr, rednum);  // 调用 contains 方法检查号码是否重复
        if (!flag) {  // 如果号码不重复
            arr[i] = rednum;  // 将号码存入数组
            i++;  // 继续接收下一个号码
        } else {
            System.out.println("当前红球号码已经存在,请重新输入");  // 如果号码重复,提示用户重新输入
        }
    } else {
        System.out.println("当前红球号码超出范围");  // 如果号码超出合法范围,提示用户重新输入
    }
}
  • for 循环中,提示用户输入每一个红色号码,并接收用户输入。
  • 使用 if 条件判断用户输入的红色号码是否在 1 到 33 的范围内。
  • 调用 contains 方法检查数组 arr 中是否已经包含了该号码,确保号码不重复。
  • 如果号码合法且不重复,则将其存入数组 arr 中的当前位置 i,并递增 i;否则提示用户重新输入或超出范围。

用户输入蓝色号码

代码语言:javascript
复制
System.out.println("请输入篮球号码");
while (true) {
    int bluenum = sc.nextInt();  // 接收用户输入的蓝色号码
    if (bluenum >= 1 && bluenum <= 16) {  // 判断号码是否在合法范围内
        arr[6] = bluenum;  // 将蓝色号码存入数组的最后一个位置(索引为 6)
        break;  // 结束循环,蓝色号码输入完成
    } else {
        System.out.println("当前篮球号码超出范围");  // 如果号码超出合法范围,提示用户重新输入
    }
}
  • 提示用户输入蓝色号码,并使用 while 循环确保用户输入的蓝色号码在 1 到 16 的范围内。
  • 如果蓝色号码合法,则将其存入数组 arr 的最后一个位置(索引为 6),并结束循环。

返回结果

return arr; // 返回包含用户输入的 6 个红色号码和 1 个蓝色号码的整型数组

  • 返回长度为 7 的整型数组 arr,其中包含了用户输入的 6 个红色号码和 1 个蓝色号码。

3.4 判断用户中奖情况

代码语言:javascript
复制
//3.判断用户中奖情况
        int redcount = 0;
        int bluecount = 0;
        //判断红球
        for (int i = 0; i < userinputnum.length - 1; i++) {
            int rednum = userinputnum[i];
            for (int j = 0; j < userinputnum.length - 1; j++) {
                if (rednum == arr[j]) {
                    redcount++;
                    break;
                }
            }
        }
        //判断篮球
        int bluenum = userinputnum[userinputnum.length - 1];
        if (bluenum == arr[userinputnum.length - 1]) {
            bluecount++;
        }
        //根据红球和篮球个数判断中奖情况
        if (redcount == 6 && bluecount == 1) {
            System.out.println("恭喜您中奖1000万元");
        } else if (redcount == 6 && bluecount == 0) {
            System.out.println("恭喜您中奖500万元");
        }else if (redcount == 5 && bluecount == 1){
            System.out.println("恭喜您中奖3000元");
        }else if ((redcount == 5 && bluecount == 0) || (redcount == 4 && bluecount == 1)) {
            System.out.println("恭喜您中奖200元");
        }else if ((redcount == 4 && bluecount == 0) || (redcount == 3 && bluecount == 1)){
            System.out.println("恭喜您中奖10元");
        }else if ((redcount == 2 && bluecount == 1)||
                 (redcount == 1 && bluecount == 1)||
                 (redcount == 0 && bluecount == 1)){
            System.out.println("恭喜您中奖5元");
        }
代码分析

初始化中奖号码计数器

int redcount = 0;

int bluecount = 0;

  • redcount 用于计算用户选择的红色号码中与中奖号码匹配的数量。
  • bluecount 用于计算用户选择的蓝色号码是否与中奖号码匹配。

判断红球号码是否中奖

代码语言:javascript
复制
for (int i = 0; i < userinputnum.length - 1; i++) {
    int rednum = userinputnum[i];  // 获取用户选择的第 i 个红色号码
    for (int j = 0; j < userinputnum.length - 1; j++) {
        if (rednum == arr[j]) {  // 检查用户选择的红色号码是否与中奖号码数组中的任何一个匹配
            redcount++;  // 如果匹配,则增加红色号码中奖计数
            break;  // 跳出内部循环,因为已经找到了匹配的号码
        }
    }
}
  • 外部循环遍历用户选择的所有红色号码。
  • 内部循环遍历中奖号码数组 arr,检查用户选择的红色号码是否在中奖号码中。
  • 如果找到匹配的号码,增加 redcount 计数,并且跳出内部循环。

判断蓝球号码是否中奖

代码语言:javascript
复制
for (int i = 0; i < userinputnum.length - 1; i++) {
    int rednum = userinputnum[i];  // 获取用户选择的第 i 个红色号码
    for (int j = 0; j < userinputnum.length - 1; j++) {
        if (rednum == arr[j]) {  // 检查用户选择的红色号码是否与中奖号码数组中的任何一个匹配
            redcount++;  // 如果匹配,则增加红色号码中奖计数
            break;  // 跳出内部循环,因为已经找到了匹配的号码
        }
    }
}
  • 检查用户选择的蓝色号码是否与中奖号码数组 arr 中的蓝色号码匹配。
  • 如果匹配,增加 bluecount 计数。

根据中奖号码数量输出中奖信息

代码语言:javascript
复制
if (redcount == 6 && bluecount == 1) {
    System.out.println("恭喜您中奖1000万元");
} else if (redcount == 6 && bluecount == 0) {
    System.out.println("恭喜您中奖500万元");
} else if (redcount == 5 && bluecount == 1) {
    System.out.println("恭喜您中奖3000元");
} else if ((redcount == 5 && bluecount == 0) || (redcount == 4 && bluecount == 1)) {
    System.out.println("恭喜您中奖200元");
} else if ((redcount == 4 && bluecount == 0) || (redcount == 3 && bluecount == 1)) {
    System.out.println("恭喜您中奖10元");
} else if ((redcount == 2 && bluecount == 1) ||
           (redcount == 1 && bluecount == 1) ||
           (redcount == 0 && bluecount == 1)) {
    System.out.println("恭喜您中奖5元");
}
  • 根据计算得到的 redcountbluecount 的值,判断用户是否中奖,并输出相应的中奖信息。
  • 按照彩票中奖规则逐个判断,优先判断更高奖项,最后判断最低奖项。

四、全套代码展示

代码语言:javascript
复制
package day3;

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

public class system1 {
    public static void main(String[] args) {
        //练习13:双色球系统
        //需求:输出所获奖项及其奖金
        //规则:号码由六个红球和一个篮球组成,红球号码1-33,篮球1-16.
        //1.生成中奖号码
        int[] arr = creatnum();
        //2.用户输入彩票号码
        int[] userinputnum = usernum();
        //3.判断用户中奖情况
        int redcount = 0;
        int bluecount = 0;
        //判断红球
        for (int i = 0; i < userinputnum.length - 1; i++) {
            int rednum = userinputnum[i];
            for (int j = 0; j < userinputnum.length - 1; j++) {
                if (rednum == arr[j]) {
                    redcount++;
                    break;
                }
            }
        }
        //判断篮球
        int bluenum = userinputnum[userinputnum.length - 1];
        if (bluenum == arr[userinputnum.length - 1]) {
            bluecount++;
        }
        //根据红球和篮球个数判断中奖情况
        if (redcount == 6 && bluecount == 1) {
            System.out.println("恭喜您中奖1000万元");
        } else if (redcount == 6 && bluecount == 0) {
            System.out.println("恭喜您中奖500万元");
        }else if (redcount == 5 && bluecount == 1){
            System.out.println("恭喜您中奖3000元");
        }else if ((redcount == 5 && bluecount == 0) || (redcount == 4 && bluecount == 1)) {
            System.out.println("恭喜您中奖200元");
        }else if ((redcount == 4 && bluecount == 0) || (redcount == 3 && bluecount == 1)){
            System.out.println("恭喜您中奖10元");
        }else if ((redcount == 2 && bluecount == 1)||
                 (redcount == 1 && bluecount == 1)||
                 (redcount == 0 && bluecount == 1)){
            System.out.println("恭喜您中奖5元");
        }
    }
    //用户购买的彩票号码
    public static int[] usernum(){
        int[] arr = new int[7];//用于存放号码
        //用户输入红球
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 6;) {
            System.out.println("请输入第"+(i+1)+"个红球号码");
            int rednum = sc.nextInt();
            //判断是否处于正常范围
            if(rednum>=1 && rednum<=33){
                boolean flag = contains(arr,rednum);
                if(!flag){//不存在
                    arr[i]=rednum;
                    i++;
                }else {
                    System.out.println("当前红球号码已经存在,请重新输入");//存在
                }
            }else {
                System.out.println("当前红球号码超出范围");
            }
        }//输入篮球号码
        System.out.println("请输入篮球号码");
        while(true){
            int bluenum = sc.nextInt();
            if(bluenum>=1 && bluenum<=16) {
                arr[6]=bluenum;
                break;
            }else {
                System.out.println("当前篮球号码超出范围");
            }
        }
        return arr;
    }

    //中奖的号码
    public static int[] creatnum(){
        int[] arr = new int[7];//用于存放号码
        Random random = new Random();
        for (int i = 0; i < 6;) {//生成6个红球
            int rednum = random.nextInt(33)+1;
            boolean flag = contains(arr,rednum);
            if(!flag){
                arr[i] = rednum;
                i++;
            }
        }
        int bluenum = random.nextInt(10)+1;
        arr[6]=bluenum;
        return arr;
    }

    //判断是否重复,重复返回true,反之返回false
    public static boolean contains(int []arr,int num){
        for (int i = 0; i < 6; i++) {
            if (arr[i] == num){
                return true;
            }
        }
        return false;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、双色球简要概述
    • 概念
    • 原理
    • 奖励规则
  • 三、案例分析
    • 3.1 判断是否重复
      • 方法实现分析
      • 方法使用说明
    • 3.2 设置中奖号码
      • 方法实现分析
    • 3.3 用户输入彩票号码
      • 方法实现分析
    • 3.4 判断用户中奖情况
      • 代码分析
  • 四、全套代码展示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档