面向对象前的第一个little项目:模拟双色球

271 阅读6分钟

首先的首先

肯定是介绍我们双色球的规则不然我们的观众老爷怎么知道我在写啥呢

投注号码由6个 红色球和1个蓝色球组成。

输入七个数字代表六个红球和一个蓝球,与随机生成数对比康康中了几个。

红色号码由1-33号中选择;蓝色号码由1-16中选择
双色球中奖条件和奖金表
一等奖:红色猜中  6  + 蓝色中  1  ---------------1000W
二等奖:红色猜中  6  + 蓝色中  0  ---------------500W
三等奖:红色猜中  5  + 蓝色中  1  ---------------3000元
四等奖:红色猜中  5  + 蓝色中  0  ---------------200元
       红色猜中  4  + 蓝色中  1  ---------------200元
五等奖:红色猜中  4  + 蓝色中  0  ---------------10元
       红色猜中  3  + 蓝色中  1  ---------------10元
六等奖:红色猜中  2  + 蓝色中  1  ---------------5元
       红色猜中  1  + 蓝色中  1  ---------------5元
       红色猜中  0  + 蓝色中  1  ---------------5元
       


好,看完双色球的规则,想必各位观众老爷也大概想到了模拟双色球怎么实现的

即处理好红球和唱跳rap蓝球之间的关系就好啦

此篇到此结束

话不多说,很容易看得出实现该小项目需要四步:

  1. 先生成中奖号码
  2. 用户输入猜的号码
  3. 将号码进行对比
  4. 输出对比结果(即中几等奖)

先来一串代码:

//用函数生成随机数模拟中奖号码效果
    public static int [] suijinumber (){
        //创建数组用于添加随机号码,数组长度为7
        int[]arr=new int[7];
        
        Random r = new Random();//为了随机取值
        
        //先添加红球
        for (int i = 0; i < arr.length-1; )
        //arr.length-1是为了给蓝球留一个位置
        {
            int redNumber = r.nextInt(33)+1;//随机添加1-33的值
            
            boolean flag =Contains(arr,redNumber);
            //该方法下面会讲到
            if(!flag){
                arr[i]=redNumber;//红球号码添加到数组中
                i++;//确保数组是不同值
            }
        }
        //添加蓝球
        int blueNumber = r.nextInt(16)+1;
        
        arr[arr.length-1]=blueNumber;

        return arr;
    }

看到这里,有小伙伴不禁有疑问:Cantains方法是什么哦?它是干嘛的哦?别急,听我解释:

我们都知道,在1-33之间选择六个数,有很大可能选到重复的数字,但是呢我们摸的双色球不可能一次性摸两个同号码的红球。

为了更加符合现实中摸双色球的情况,我们必须必须要避免随机数两次抽取到同一个随机数,至少要排除掉相同的随机数。

所以有了以下方法:

public static boolean Contains(int[]arr,int number)
//该方法用于判断是否和之前抽出数据相同
{
    for (int i = 0; i < arr.length-1; i++) 
    {
        if(arr[i]==number)
            return true;
            //相等则返回 true 值,if判断!true数组索引值不会增加,是已添加数据
    }
    return false;
}

好耶!!!

  • 生成中奖号码

到了用户输入的时候了:

注意事项有二:

  1. 用户输入数不可以超出范围(红球1-33,蓝球1-16)
  2. 用户(红球)不可以输入相同的号码(同刚刚取随机数的原理)
public static int[] userInput ()
{
    int[]arr=new int[7];
    
    Scanner sc =new Scanner(System.in);
    
    for (int i = 0; i < 6; )
    {
        System.out.println("请输入第"+(i+1)+"个红球号码:");
        
        int redNumber=sc.nextInt();
        
        if(redNumber>=1&&redNumber<=33)
        {
            boolean flag =Contains(arr,redNumber);
            if(!flag)
            {
                arr[i]=redNumber;//红球号码添加到数组中
                i++;//确保数组是不同值
            }
            else 
            {
                System.out.println("当前红球号码已经存在啦!莫耍宝");
            }
        }else {
            System.out.println("红球号码不合规,要输入1-33号");
        }
    }
    System.out.println("请输入蓝球号码:");
    
    int blueNumber =sc.nextInt();
    
    if(blueNumber>=1&&blueNumber<=16)
    {
        arr[arr.length-1]=blueNumber;
    }
    else{
        System.out.println("超范围啦,找茬是不?");
    }
    return arr;//返回用户输入的七个颜色球
}

OK

  • 用户输入猜的号码

接下来就是将用户数据与生成的随机数进行对比了:

int redCount =0 ;
int blueCount =0 ;
//判断红球
for (int i = 0; i < userInputArr.length; i++)//要将红球挨个比较
{
    int redNumber=userInputArr[i];
    for (int j = 0; j < arr.length-1; j++) //保证不同顺序红球也代表中奖
    {
        if(redNumber==arr[j]){
            redCount++;
            break;//如果找到了,就跳过该球,判断下一个红球是否中奖
        }
    }

}
//判断蓝球
int blueNumber = userInputArr[userInputArr.length-1];
if(blueNumber==arr[arr.length-1]){
    blueCount++;
}

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

第三步也完成了呢~

  • 将号码进行对比

最后就是输出

但是由于输出本菜鸟过于没有技术含量,那就直接献上该项目全部的代码吧(其中包含了对比输出结果)估计谁都想成为Ctrl CV工程师吧

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

public class shuang_se_qiu_chou_jiang {
    public static void main(String[] args) {
        //1.先生成中奖号码
        int[]arr=suijinumber ();
/*
       //想作弊偷看抽出号码的话:

       for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]+"  ");
        }

*/
        //2.用户输入彩票号码
        int[] userInputArr =userInput();


        //3.对比是否中奖
        int redCount =0 ;
        int blueCount =0 ;
        //判断红球
        for (int i = 0; i < userInputArr.length; i++)//要将红球挨个比较
        {
            int redNumber=userInputArr[i];
            for (int j = 0; j < arr.length-1; j++) //保证不同顺序红球也代表中奖
            {
                if(redNumber==arr[j]){
                    redCount++;
                    break;//如果找到了,就跳过,判断下一个红球是否中奖
                }
            }

        }
        //判断蓝球
        int blueNumber = userInputArr[userInputArr.length-1];
        if(blueNumber==arr[arr.length-1]){
            blueCount++;
        }

        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&&blueCount==0)||(redCount==4&&blueCount==1)){
             System.out.println("恭喜你,中四等奖");
         } else if((redCount==3&&blueCount==1)||(redCount==4&&blueCount==0)){
             System.out.println("恭喜你,中五等奖");
         } else 
         if((redCount==1&&blueCount==1)||(redCount==0&&blueCount==1)||(redCount==2&&blueCount==1)){
             System.out.println("恭喜你,中六等奖");
         } else  {
             System.out.println("不是吧不是吧,真的有人一个都没中吗?");
             
         }

    }
///////////////////////////////////////////////////////////////////
    //用户输入的号码
    public static int[] userInput (){
        int[]arr=new int[7];
        Scanner sc =new Scanner(System.in);
        for (int i = 0; i < 6; ) {
            System.out.println("请输入第"+(i+1)+"个红球号码:");
            int redNumber=sc.nextInt();
            if(redNumber>=1&&redNumber<=33){
                boolean flag =Contains(arr,redNumber);
                if(!flag){
                    arr[i]=redNumber;//红球号码添加到数组中
                    i++;//确保数组是不同值
                }else {
                    System.out.println("当前红球号码已经存在啦!莫耍宝");
                }
            }else {
                System.out.println("红球号码不合规,要输入1-33号");
            }
        }
        System.out.println("请输入蓝球号码:");
        int blueNumber =sc.nextInt();
        if(blueNumber>=1&&blueNumber<=16){
            arr[arr.length-1]=blueNumber;

        }
        else{
            System.out.println("超范围啦,找茬是不?");
        }
        return arr;
    }


////////////////////////////////////////////////////////////////////
//用函数生成随机数模拟中奖号码效果
    public static int [] suijinumber (){
        //创建数组用于添加随机号码,数组长度为7
        int[]arr=new int[7];
        Random r = new Random();//为了随机取值
        //先添加红球
        for (int i = 0; i < arr.length-1; ) {
            int redNumber = r.nextInt(33)+1;
            boolean flag =Contains(arr,redNumber);
            if(!flag){
                arr[i]=redNumber;//红球号码添加到数组中
                i++;//确保数组是不同值
            }
        }
        //添加蓝球

        int blueNumber = r.nextInt(16)+1;
        arr[arr.length-1]=blueNumber;

        return arr;
    }
    ////////////////////////////////////////////////////////////////
    public static boolean Contains(int[]arr,int number) {//判断是否和之前抽出数据相同
        for (int i = 0; i < arr.length-1; i++) {
            if(arr[i]==number)
                return true;//相等则返回 true 值,if判断!true数组索引值不会增加,是已添加数据
        }
        return false;
    }

}

好啦,本篇内容到此结束

完结撒花~~~