【用java写的】双色球中奖模拟器

本文详细介绍了如何使用Java实现一个双色球彩票模拟器,包括随机生成不重复的红球号码、用户输入号码、比较与统计相同数字以及判断中奖等级的全过程。难点在于生成不重复的随机数,通过循环和条件判断实现了这一功能。程序逻辑清晰,易于理解。
摘要由CSDN通过智能技术生成

双色球,6个红球,1个蓝球,而且红球中的数据不能重复,红球的数字范围为1-33,蓝球的数字范围为1-16。

然后我们作为彩民,自己买号,在模拟器中则自己依次输入每个球对应的号码,最后开奖的时候判断我们中了多少。

双色球中奖规则:

我当时看到这个案例,感觉很麻烦,首先我认为最难搞的方面是,生成红球的随机数,这个数我网上查了一下,双色球的数字是不能重复的,那么我就得要生成不同的6个随机数,然后存到数组里。怎么实现,当时我还在想。

后来我就先把程序的功能先分块:

1.随机生成中奖号码,定义一个数组长度为6的int 类型的数组存红球的号码,且红球的数组中数据不能有相同的,定义数组长度为1的数组来存蓝球号码。

2.用户也是我,依次输入我的红球号码和蓝球号码。

3.统计结果,双色球要顺序和数字都相同才算有效,也就是说,数组的索引和索引对应的数据都要相同才可以。

4.判断结果。

然后我就开始写

第一部分

  //随机生成中奖号码
        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        int[] red = new int[6];
        int [] blue=new int[1];
       blue [0]= r.nextInt(16) + 1;//随机生成蓝球的号码
        System.out.println(blue[0]);
        for (int i = 0; i < red.length; ) {    //随机生成红球号码,且随机数不能重复
            int a = r.nextInt(33) + 1;
            boolean b = Shuijishupanduan(red, a);
            if (!b) {
                red[i] = a;
                i++;
            }
        }

在其中我调用了一个有返回值的方法,用来判断随机数是否重复的,这是我认为最难的地方,但是我也想出来了哈哈哈。方法是这样的:

 //判断随机数是否相同的方法
    public static boolean Shuijishupanduan(int[] arr, int a) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == a) {
                return true;
            }
        }
        return false;

 返回一个boolean类型,然后i++放在,if语句中,就表示随机数一直生成,到这个随机数在数组中没有相同的时候就存入数组中,然后才能 i 自增到数组中下一位循环。在这里我设了随机数的范围是1-33.

第二部分

//用户输入自己的号码
        int []arr=new int[6];
        int []arr1=new int[1];
        System.out.println("覃泺宇牌双色球,赢到手麻");
        int n=1;
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入你的第"+n+"个红球的号码:");
            int shuru=sc.nextInt();
            arr[i]=shuru;
            n++;
        }
        System.out.println("请输入蓝球的号码:");
        int B=sc.nextInt();
        arr1[0]=B;

简单的遍历数组,然后给数组塞数据,逐个塞进去,定义了2个数组来存我自己输入的数据,然后后面就可以和之前随机生成的中奖号码的两个数组(一个红球的,一个蓝球的)进行比较。(索引相同的数据也相同才算有效)

第三部分 

//判断红、蓝球有几个和中奖号码相同的,红球和蓝球分开统计。

   int RED=xiangtong(red,arr);
   int BULE=xiangtong(blue,arr1);

判断两个数组有几个数据相同,再定义一个计数器来统计相同的个数就完事了,那么我又要比红球的,又要比蓝球的,这两种是重复的工作,我当时就定义了一个方法,输入要比较的两个数组,就可以返回他们有几个相同索引数据也一样的元素。

 //判断两个数组有多少个相同的数据
    public static int xiangtong(int arr1[],int arr2[]) {
        int xiangtongshu=0;
        for (int i = 0; i < arr1.length; i++) {
            if (arr2[i]==arr1[i]){   //双色球的号码要相同,而且还要对应的位置也相同(也就是俩数组的相同索引的数据要一样)
                xiangtongshu++;
            }
        }
    return xiangtongshu;

第四部分

就是判断结果了,依照上图的规则,用if语句就可以了,然后我就也定义了一个方法,只要输入红球中的数和蓝球中的数,便可返回几等奖。

 //判断奖项
    public static void jiang(int r,int b){
        if (r==6 && b==1){
            System.out.println("恭喜你!中了一等奖,奖金1000万元!");
        }
        else if (r==6 && b==0){
            System.out.println("恭喜你!中了二等奖,奖金500万元!");
        }
        else if (r==5 && b==1){
            System.out.println("恭喜你!中了三等奖,奖金3000元!");
        }
        else if ((r==5 && b==0)||(r==4 && b==1)){
            System.out.println("恭喜你!中了个四等奖,奖金200元!");
        }     else if ((r==4 && b==0)||(r==3&&b==1)){
            System.out.println("恭喜你!中了个五等奖,奖金10元");
        }
        else if ((r==2&&b==1)||(r==1&&b==1)||(r==0&&b==1)){
            System.out.println("恭喜你!大怨种,中了六等奖,奖金5元");
        }
    }

再调用一下方法

 jiang(RED,BULE);

总体的程序是这样的:

package Test;

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

public class Shangseqiu {
    public static void main(String[] args) {
        //随机生成中奖号码
        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        int[] red = new int[6];
        int[] blue = new int[1];
        blue[0] = r.nextInt(16) + 1;//随机生成蓝球的号码

        for (int i = 0; i < red.length; ) {    //随机生成红球号码,且随机数不能重复
            int a = r.nextInt(33) + 1;
            boolean b = Shuijishupanduan(red, a);
            if (!b) {
                red[i] = a;
                i++;
            }
        }
        //用户输入自己的号码
        int[] arr = new int[6];
        int[] arr1 = new int[1];
        System.out.println("覃泺宇牌双色球,赢到手麻");
        int n = 1;
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入你的第" + n + "个红球的号码:");
            int shuru = sc.nextInt();
            arr[i] = shuru;
            n++;
        }
        System.out.println("请输入蓝球的号码:");
        int B = sc.nextInt();
        arr1[0] = B;
        //判断红、蓝球有几个和中奖号码相同的,红球和蓝球分开统计。

        int RED = xiangtong(red, arr);
        int BULE = xiangtong(blue, arr1);
        //根据统计的红球和蓝球相同的结果,分析所中的奖项,有普适性可以写成方法,只要输入红球和蓝球相同的个数就得结果
        jiang(RED, BULE);
    }

    //判断随机数是否相同的方法
    public static boolean Shuijishupanduan(int[] arr, int a) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == a) {
                return true;
            }
        }
        return false;
    }

    //判断两个数组有多少个相同的数据
    public static int xiangtong(int arr1[], int arr2[]) {
        int xiangtongshu = 0;
        for (int i = 0; i < arr1.length; i++) {
            if (arr2[i] == arr1[i]) {   //双色球的号码要相同,而且还要对应的位置也相同(也就是俩数组的相同索引的数据要一样)
                xiangtongshu++;
            }
        }
        return xiangtongshu;
    }

    //判断奖项
    public static void jiang(int r, int b) {
        if (r == 6 && b == 1) {
            System.out.println("恭喜你!中了一等奖,奖金1000万元!");
        } else if (r == 6 && b == 0) {
            System.out.println("恭喜你!中了二等奖,奖金500万元!");
        } else if (r == 5 && b == 1) {
            System.out.println("恭喜你!中了三等奖,奖金3000元!");
        } else if ((r == 5 && b == 0) || (r == 4 && b == 1)) {
            System.out.println("恭喜你!中了个四等奖,奖金200元!");
        } else if ((r == 4 && b == 0) || (r == 3 && b == 1)) {
            System.out.println("恭喜你!中了个五等奖,奖金10元");
        } else if ((r == 2 && b == 1) || (r == 1 && b == 1) || (r == 0 && b == 1)) {
            System.out.println("恭喜你!大怨种,中了六等奖,奖金5元");
        }
    }
}

 花了我打gogo的时间,弄个双色球模拟,总体不算太难,最麻烦的部分我还是感觉是那个随机数不能重复的部分,我想了一些时间。i++放在if语句里很精髓我感觉。

我打的草稿。思路应该还是清晰的我认为。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一支猫咔qly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值