Java实现双色球中奖系统-Day04

Java实现双色球系统

实现思路

  1. 双色球中奖规则
/**
 * 双色求抽奖系统
 * 规则:
 * 1.投注号码由6个红球和1个蓝球组成。红色球号码选值范围:1~33 蓝色球号码选值范围:1~16
 * 2.中奖条件及奖金
 * 奖次  红球   蓝球     单注奖金分配
 * 一     6     1       最高1000万
 
 * 二     6     0       最高500万
 
 * 三     5     1       3000元
 *        5    0
 
 * 四     4     1        200元
 *        4     0
 
 * 五     3     1       10元
 *        2     1
 
 * 六     1      1       5元
 *        0      1
 */

分析中奖规则我们不难发现,想要实现规则中的功能,我们其实只需要将用户输入进入系统中数字与奖池的数字分别按照球的颜色一一比对,然后统计各红、蓝两球的中奖个数,最后进行结果的判断与输出即可。

其中,值得注意的是,无论红色球还是蓝色球,它们的数值都是有一定的范围的,所以在用户输入数字的时候,我们就需要进行一个范围判断,然后再决定要不要进行数组赋值。

其次,我们还需要注意的是,红色球的数字录入是需要进行一次“是否重复”的判断的,如果重复,则给出提示并提供给用户再次输入的机会。

好啦,废话不多说,我们之间进入正题!

1.将用户的号码存入数组
//将用户的号码存入数组
    //  红球不能重复 蓝球无需判断
public static int[] getNumberArray() {
        int[] numberArray = new int[7];
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入您的红球号码:");
        for (int i = 0; i < numberArray.length - 1; ) {
            int temp = scan.nextInt();
            if (temp >= 1 && temp <= 33) {
                boolean temJud = getJud(temp, numberArray);
                if (temJud) {
                    numberArray[i] = temp;
                    i++;
                } else {
                    System.out.println("此号码重复!请重新输入");
                }
            } else {
                System.out.println("您输入的号码超出范围!请重新输入:");
            }
        }
        System.out.println("===================");
        System.out.println("请输入您的蓝球号码:");
        boolean flog = true;
        while (flog) {
            int temp = scan.nextInt();
            if (temp >= 1 && temp <= 16) {
                numberArray[numberArray.length - 1] = temp;
                flog = false;
            } else {
                System.out.println("您输入的号码超出范围!请重新输入:");
            }
        }
        return numberArray;
    }
2.//判断是否重复
public static boolean getJud(int x, int[] array) {
        boolean flog = true;
        for (int j : array) {
            if (x == j) {
                flog = false;
            }
        }
        return flog;
    }

现在,我们已经实现了系统功能的第一步,获取用户输入的双色球号码。

接下来,我们就要生成一个随机奖池,然后进行数据比对:

3.生成奖池数组
public static int[] getJackpot() {
        Random r = new Random();
        int[] JackpotArray = new int[7];
        for (int i = 0; i < JackpotArray.length - 1;) {
            int temp = r.nextInt(33) + 1;
            if (getJud(temp, JackpotArray)) {
                JackpotArray[i] = temp;
                i++;
            }
        }
        int temp1 = r.nextInt(16) + 1;
        JackpotArray[JackpotArray.length - 1] = temp1;
        return JackpotArray;
    }

这里,如果对随机数生成方法Random不熟悉,相信大家一定会疑惑,为什么生成的temp后面要+1?

解释一下:

Random r = new Random();//创建随机数生成对象
int temp = r.nextInt(33);//生成0~32的随机数
//由于Random生成的随机数默认是0~我们给的数值这个范围内的值,而且包括0,但是不包括这个值,也就是”包小不包大“包左不包右”
int temp = r.nextInt(33) + 1;//生成1~33的随机数
4.数据比对

在这里,我们选择返回一个中奖个数情况的数组,第一个元素存储红球中奖个数,第二个元素存储蓝球中奖个数。

 //中奖情况判断
    public static int[] WinSitu(int[] array1, int[] array2) {
        int redCount = 0;
        int blueCount = 0;
        for (int i = 0; i < array1.length - 1; i++) {
            for (int j = 0; j < array2.length-1; j++) {
             if (array1[i] == array2[j]){
                    redCount++;
                    break;
                }
            }
            }
        if (array1[array1.length - 1] == array2[array2.length - 1]) {
            blueCount++;
        }
        return new int[]{redCount, blueCount};
    }

最后,我们只需要判断并打印中奖结果就行啦!

//中奖情况判断输出
    
    public static void getPrintW(int x,int y){
        if(x==6 && y ==1){
            System.out.println("恭喜您中一等奖了,奖金为1000万元!");
        } else if (x==6 && y==0) {
            System.out.println("恭喜您中二等奖了,奖金为500万元!");
        }else if ((x==5 && y==6) |(x == 5 && y == 0)){
            System.out.println("恭喜您中三等奖了,奖金为3000元!");
        } else if ((x==4 && y == 1)|(x==4 && y == 0)) {
            System.out.println("恭喜您中四等奖了,奖金为200元!");
        } else if ((x==3 && y == 1)|(x==2&&y==1)) {
            System.out.println("恭喜您中五等奖了,奖金为10元!");
        } else if ((x==1 && y == 1)|(x==0&&y==1)) {
            System.out.println("恭喜您中六等奖了,奖金为5元!");
        }else {
            System.out.println("不要气馁,下次再赢!");
        }
    }

完整代码

package com.java.exercise;
//Author:Yh

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

/**
 * 双色求抽奖系统
 * 规则:
 * 1.投注号码由6个红球和1个蓝球组成。红色球号码选值范围:1~33 蓝色球号码选值范围:1~16
 * 2.中奖条件及奖金
 * 奖次  红球   蓝球     单注奖金分配
 * 一     6     1       最高1000万
 * 二     6     0       最高500万
 * 三     5     1       3000元
 * 5    0
 * 四     4     1        200元
 * 4     0
 * 五      3     1       10元
 * 2     1
 * 六     1      1       5元
 * 0      1
 */
public class TclSystem {
    public static void main(String[] args) {
        int[] JackpotArray = getJackpot();
        int[] TemArray = getNumberArray();
        int[] arr = WinSitu(TemArray, JackpotArray);
        int x = arr[0];
        int y = arr[1];
        getPrintW(x, y);
    }

    //将用户的号码存入数组
    //  红球不能重复 蓝球无需判断
    public static int[] getNumberArray() {
        int[] numberArray = new int[7];
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入您的红球号码:");
        for (int i = 0; i < numberArray.length - 1; ) {
            int temp = scan.nextInt();
            if (temp >= 1 && temp <= 33) {
                boolean temJud = getJud(temp, numberArray);
                if (temJud) {
                    numberArray[i] = temp;
                    i++;
                } else {
                    System.out.println("此号码重复!请重新输入");
                }
            } else {
                System.out.println("您输入的号码超出范围!请重新输入:");
            }
        }
        System.out.println("===================");
        System.out.println("请输入您的蓝球号码:");
        boolean flog = true;
        while (flog) {
            int temp = scan.nextInt();
            if (temp >= 1 && temp <= 16) {
                numberArray[numberArray.length - 1] = temp;
                flog = false;
            } else {
                System.out.println("您输入的号码超出范围!请重新输入:");
            }
        }
        return numberArray;
    }

    //判断是否重复
    public static boolean getJud(int x, int[] array) {
        boolean flog = true;
        for (int j : array) {
            if (x == j) {
                flog = false;
            }
        }
        return flog;
    }

    //生成奖池数组
    public static int[] getJackpot() {
        Random r = new Random();
        int[] JackpotArray = new int[7];
        for (int i = 0; i < JackpotArray.length - 1; ) {
            int temp = r.nextInt(33) + 1;
            if (getJud(temp, JackpotArray)) {
                JackpotArray[i] = temp;
                i++;
            }
        }
        int temp1 = r.nextInt(16) + 1;
        JackpotArray[JackpotArray.length - 1] = temp1;
        return JackpotArray;
    }

    //中奖情况判断
    public static int[] WinSitu(int[] array1, int[] array2) {
        int redCount = 0;
        int blueCount = 0;
        for (int i = 0; i < array1.length - 1; i++) {
            for (int j = 0; j < array2.length - 1; j++) {
                if (array1[i] == array2[j]) {
                    redCount++;
                    break;
                }
            }
        }
        if (array1[array1.length - 1] == array2[array2.length - 1]) {
            blueCount++;
        }
        return new int[]{redCount, blueCount};
    }
    //中奖情况判断输出

    public static void getPrintW(int x, int y) {
        if (x == 6 && y == 1) {
            System.out.println("恭喜您中一等奖了,奖金为1000万元!");
        } else if (x == 6 && y == 0) {
            System.out.println("恭喜您中二等奖了,奖金为500万元!");
        } else if ((x == 5 && y == 6) | (x == 5 && y == 0)) {
            System.out.println("恭喜您中三等奖了,奖金为3000元!");
        } else if ((x == 4 && y == 1) | (x == 4 && y == 0)) {
            System.out.println("恭喜您中四等奖了,奖金为200元!");
        } else if ((x == 3 && y == 1) | (x == 2 && y == 1)) {
            System.out.println("恭喜您中五等奖了,奖金为10元!");
        } else if ((x == 1 && y == 1) | (x == 0 && y == 1)) {
            System.out.println("恭喜您中六等奖了,奖金为5元!");
        } else {
            System.out.println("不要气馁,下次再赢!");
        }
    }
}

运行结果展示


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值