首页 > 编程语言 >用Java模拟双色球

用Java模拟双色球

时间:2024-04-06 17:32:56浏览次数:34  
标签:双色球 Java 号码 int System println return 模拟 out

目录

题目要求

投注规则

开奖规则

需求分析

代码实现

运行预览


题目要求

用java模拟双色球的投注和开奖

投注规则

双色球分红色球和蓝色球。红球一共6组,每组从[1,33]中抽取一个,六个互相不重复。蓝球从[1,16]中抽取一个数字,组成一注双色球选号。

开奖规则

需求分析

除主方法外,有以下三个关键方法

  • 用户投注一组号码
  • 随机生成一组中奖号码
  • 判断中奖情况

还有一些辅助方法

  • 检测红色球的重复(投注号码、生成中奖号码)
  • 输出号码
  • 输出庆祝语句

代码实现

import java.util.Scanner; //从键盘键入号码
import java.util.Random; //随机生成中奖号码
import java.util.Arrays; //排序数组

public class DoubleChromosphere {
    public enum prizeLevel { //枚举奖项
        FirstPrize, SecondPrize, ThirdPrize, FourthPrize, FifthPrize, SixthPrize, NoPrize
    }

    public static void main(String[] args) {
        System.out.println("————请投注号码————");
        int[] userNumbers = selectUserNumbers();
        System.out.println("————投注结束————");
        System.out.println("以下是您投注的号码: ");
        output(userNumbers);
        System.out.print("\n");
        int[] winningNumbers = createWinningNumbers();
        System.out.println("以下是开奖号码: ");
        output(winningNumbers);
        prizeLevel userPrizeLevel = judge(userNumbers, winningNumbers);
        congratulations(userPrizeLevel);
    }

    /**
     * 用于用户投注号码
     * @return 用户选择的号码数组
     */
    public static int[] selectUserNumbers() {
        Scanner sc = new Scanner(System.in);
        int[] userNum = new int[7];
        boolean succeed; //用于检测是否投注成功
        for (int i = 0; i < 6; i++) {
            int redTemp;
            do {
                System.out.print("请输入您选择的第" + (i + 1) + "个红色球号码:");
                succeed = true;
                redTemp = sc.nextInt();
                if (redTemp < 1 || redTemp > 33) {
                    System.out.println("您选择的号码超出范围了,请重新输入!");
                    succeed = false;
                } else if (repeat(redTemp, userNum)) {
                    System.out.println("您已经选过该号码了,请重新输入!");
                    succeed = false;
                }
            } while (!succeed);
            userNum[i] = redTemp;
        }
        int blueTemp;
        do {
            System.out.print("请输入您选择的蓝色球号码:");
            blueTemp = sc.nextInt();
            if (blueTemp < 1 || blueTemp > 16) {
                System.out.println("您选择的号码超出范围了,请重新输入!");
                succeed = false;
            } else {
                succeed = true;
            }
        } while (!succeed);
        userNum[6] = blueTemp;
        return userNum;
    }

    /**
     * 用于随机生成一组中奖号码
     * @return 中奖号码数组
     */
    public static int[] createWinningNumbers() {
        int[] luckyNum = new int[7];
        Random r = new Random();
        for (int i = 0; i < 6; i++) {
            int temp;
            do {
                temp = r.nextInt(33) + 1; //随机生成0至32的数,再加1
            } while (repeat(temp, luckyNum));
            luckyNum[i] = temp;
        }
        luckyNum[6] = r.nextInt(16) + 1;
        return luckyNum;
    }

    /**
     * 用于判断用户投注的情况,返回中奖等级
     * @param wager 用户投注号码数组
     * @param lottery 中奖号码数组
     * @return 中奖等级
     */
    public static prizeLevel judge(int[] wager, int[] lottery) {
        int countRed = 0; //countRed记录用户中了多少个红球
        for (int i = 0; i < 6; i++) {
            if (repeat(wager[i], lottery)) {
                countRed++;
            }
        }
        boolean ifBlue = wager[6] == lottery[6]; //countBlue记录用户是否中蓝球
        if (countRed == 6 && ifBlue) {
            return prizeLevel.FirstPrize;
        } else if (countRed == 6) {
            return prizeLevel.SecondPrize;
        } else if (countRed == 5 && ifBlue) {
            return prizeLevel.ThirdPrize;
        } else if (countRed == 5 || countRed == 4 && ifBlue) {
            return prizeLevel.FourthPrize;
        } else if (countRed == 4 || countRed == 3 && ifBlue) {
            return prizeLevel.FifthPrize;
        } else if (ifBlue) {
            return prizeLevel.SixthPrize;
        } else {
            return prizeLevel.NoPrize;
        }
    }

    /**
     * 检测红色球的重复,用于判断是否重复下注或红色球是否中奖
     * @param num 待检测的号码
     * @param arr 待检测的数组
     * @return 是否重复
     */
    public static boolean repeat(int num, int[] arr) {
        for (int i = 0; i < 6; i++) { // 只检查前6个红球号码
            if (num == arr[i]) {
                return true;
            }
        }
        return false;
    }

    /**
     * 用于输出号码
     * @param outputArray 待输出的号码数组
     */
    public static void output(int[] outputArray) {
        int[] redBall = Arrays.copyOfRange(outputArray, 0, 6);
        Arrays.sort(redBall); //对红色球数组按升序排序
        System.out.print("红色球:");
        for (int element : redBall) {
            System.out.print(element + " ");
        }
        System.out.print("蓝色球:" + outputArray[6]);
    }

    /**
     * 用于打印庆祝语句"恭喜获得x等奖"
     * @param level 中奖等级
     */
    public static void congratulations(prizeLevel level) {
        System.out.print("\n");
        switch (level) {
            case NoPrize -> System.out.println("很遗憾,您没有获奖。");
            case SixthPrize -> System.out.println("恭喜,您获得了六等奖!");
            case FifthPrize -> System.out.println("恭喜,您获得了五等奖!");
            case FourthPrize -> System.out.println("恭喜,您获得了四等奖!");
            case ThirdPrize -> System.out.println("恭喜,您获得了三等奖!");
            case SecondPrize -> System.out.println("恭喜,您获得了二等奖!");
            case FirstPrize -> System.out.println("恭喜,您获得了一等奖!");
        }
    }
}

运行预览


以上即为利用java实现双色球模拟的代码,如有任何错漏、不足、可简化提升之处,敬请批评指正!

2024年4月6日

标签:双色球,Java,号码,int,System,println,return,模拟,out
From: https://blog.csdn.net/ouoi330/article/details/137337374

相关文章

  • JAVA基础
    一、什么是JavaJava是一种高级编程语言,由SunMicrosystems公司于1995年推出。Java具有跨平台性、面向对象、健壮性、安全性、可移植性等特点,被广泛应用于企业级应用开发、移动应用开发、大数据处理、云计算等领域。Java程序可以在不同的操作系统上运行,只需编译一次,就可以在任......
  • Java中简单的旋转操作
    题目:给定两个字符串A和B。A的旋转操作就是将A最左边的字符移动到最右边,判断A是否能变成Bpublicclasstest2{publicstaticvoidmain(String[]args){//建立两个字符串Stringstr1="abcdef";Stringstr2="defabc";booleanresult=......
  • 基于java中的springboot实现海滨体育馆管理系统的设计与实现演示【附项目源码+论文说
    基于springboot实海滨体育馆管理系统的设计与实现演示摘要本基于SpringBoot的海滨体育馆管理系统设计目标是实现海滨体育馆的信息化管理,提高管理效率,使得海滨体育馆管理工作规范化、高效化。本文重点阐述了海滨体育馆管理系统的开发过程,以实际运用为开发背景,基于Spring......
  • 基于java中的springboot框架实现服装销售平台系统【附项目源码+论文说明】
    基于SpringBoot实现服装销售平台系统设计演示摘要随着信息互联网购物的飞速发展,一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了“衣依”服装销售平台的开发全过程。通过分析企业对于“衣依”服装销售平台的需求,创建了一个计算机管理“衣依”服装销售平......
  • idea 显示java ee模块
    --新版idea没有javaEE模块(如下图所示) --如何创建web项目 --alt+ctrl+shift+/--调出如下界面,点击第一个  --按字母排序,找到javaee-legacy.project.wizard,选中  --接着回到创建项目的界面,就会发现有JavaEE组件出现--开始创建你的web项目吧  注:......
  • 浅谈威廉希尔足球app比分源码Java算法
    我写了一套足球篮球比分的助手,说起来和澳客的口袋app有点相似,我仿照了它需要研究源码的朋友可以交流下目前项目已经线下实体店投入运营前端支持Android和iOS后台是Java威廉希尔足球app78888.ME ......
  • Java登陆第三十九天——Router路由入门
    什么是路由? 类似于Servlet的映射路径。 路由可以让,不同的URL展示不同的页面。RouterRouter是Vue衍生的生态系统之一,所以需要单独安装。路由案例需求1安装依赖还记得npm安装依赖指令吗?看这。npmivue-route1-1编写组件略2编写路由配置类似于Servlet的映射路径,需......
  • Java斐波那契查找知识点(含面试大厂题和源码)
    斐波那契查找(FibonacciSearch)是一种在有序数组中查找元素的高效算法,它基于斐波那契数列的性质。斐波那契查找是二分查找的一种改进,通过使用斐波那契数列来确定搜索范围,可以在某些情况下减少比较次数,特别是在数组较大时表现更为出色。以下是斐波那契查找的一些关键知识点:......
  • Java数据结构队列
    队列(Queue) 概念队列的使用注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。importjava.util.LinkedList;importjava.util.Queue;publicclassTest{publicstaticvoidmain(String[]args){Queue<Integ......
  • 【附源码】JAVA计算机毕业设计足球青训俱乐部管理后台系统(springboot+mysql+开题+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着足球运动的日益普及,足球青训作为培养足球后备人才的重要基地,其管理和发展逐渐受到广泛关注。然而,传统的青训俱乐部管理方式往往存在着信息化程度......