java专题训练(双色球,难度较大,必须细心)

package 专题练习;
//需求:
//投注号码由6个红色球号码和1个蓝色球号码组成
//红色球号码从1-33中选择;
//蓝色球号码从1-16中选择

/* 如下是中将条件和奖金表
一等奖 : 红色球和蓝色球全中                    1000万
二等奖 : 中6个红色球 0个蓝色球                 500万
三等奖 : 中5个红色球 1个蓝色球                 3000元
四等奖 : 中5个红色球                          200元
      或 中4个红球 1个蓝色球
五等奖 : 中4个红球  0个蓝色球                  10元
      或 中3个红球  1个蓝色球
六等奖 : 中2个红球  1个蓝色球                  5元
      或 中1个红球  1个蓝色球
      或 中0个红球  1个蓝色球
 */

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

//思路: 1. (1)首先要随机生成6个红色球号码
//         (2)判断红色号码是否重复
//         (3)随机生成1个蓝色球号码
//         (4)把红色球号码和蓝色球号码放到同一个数组中
//
//      2. (1)得到用户所给的号码
//         (2)要判断号码是否符合规范
//         (3)不符合规范要重新输入
//
//      3. 得到用户答对的号码的个数
//      4. 6个if语句来最后判断


public class Double_Color_Lottery_System {

    public static void main(String[] args) {
        //主入口
        //弄一个red数组
        int[] red_array = new int[6];
        //赋值red数组(6位)
        red_array = random_red_number(red_array); //得到6位red_number数组
        //生成蓝色随机号码
        int blue_num = blue_random_number();
        //合并
        int[] RED_BLUE = HeBing_number(red_array,blue_num);
        print_array(RED_BLUE);

        //得到用户号码
        int[] user_num = User_input(RED_BLUE);
        //求个数
        int[] count = ChouZhongGeShu(RED_BLUE,user_num);
        //求奖金
        GET_money(count);
    }

    //判断是否重复方法,重复返回-1,没有重复返回1
    public static int PanDuan_repetition(int[] red_number_array,int random_red_number){
        for (int i = 0; i < red_number_array.length; i++) {
            if(red_number_array[i] == random_red_number){
                return -1;
            }
        }
        return 1;
    }

    //随机生成6个红色球号码
    public static int[] random_red_number(int[] red_number_array){
        Random r = new Random();
        int[] red_arrary = new int[red_number_array.length];
        for (int i = 0; i < red_number_array.length; i++) {
            int red_random_number = r.nextInt(33) + 1;
            //这里需要判断是否重复(可以写一个判断是否重复的方法)
            if(PanDuan_repetition(red_arrary,red_random_number) == -1){
                i--;
            }
            else{
                //没重复就录入
                red_arrary[i] = red_random_number;
            }
        }
        return red_arrary;
    }

    //随机生成一个蓝色球号码
    public static int blue_random_number(){
        Random r = new Random();
        int blue_number = r.nextInt(16) + 1;
        return blue_number;
    }

    //合并蓝色球号码和红色球号码
    public static int[] HeBing_number(int[] red_array,int blue_number){
        int[] red_blue_array = new int[red_array.length + 1];
        //合并数组的长度为红色号码个数 + 蓝色号码个数
        for (int i = 0; i < red_blue_array.length - 1; i++) {
            red_blue_array[i] = red_array[i];
        }
        red_blue_array[red_blue_array.length - 1] = blue_number;
        return red_blue_array;
        //合并完毕(random_number_of_red_and_blue)
    }

    //得到用户所给号码  (返回的是一个数组,并且要判断输入的号码是否合理)
    public static int[] User_input(int[] red_blue_array){
        int[] number = new int[red_blue_array.length];
        //这里的number数组就是直接总长为7,前六个留给了red,等下直接把最后一个给蓝色球号码

        //输入红色号码的提示
        System.out.println("用户请准备输入红色号码");
        Scanner c = new Scanner(System.in);
        for (int i = 0; i < number.length - 1; i++) {
            System.out.println("开始读入第" + (i+1) + "个红色球号码");
            int user_number = c.nextInt();//用户读入
            if(user_number > 33 || user_number < 1){
                System.out.println("读入错误,数字非法,请重新输入:");
                i--;
            }
            else{
                number[i] = user_number;
            }
        }

        //准备读入蓝色球号码
        System.out.println("开始读入蓝色球号码:");
        int blue_number;
        while (true) {
            blue_number = c.nextInt();
            if(blue_number>16 || blue_number<1){
                System.out.println("蓝色球号码非法,请重新读入:");
            }
            else{
                break;
            }
        }
        //合并user的红色球号码和蓝色球号码
        number[red_blue_array.length-1] = blue_number;
        return number;
        //合并完毕(user)
    }

    //求user对了几个红色球号码和蓝色球号码(可以返回一个小数组,记录分别中了多少个)
    public static int[] ChouZhongGeShu(int[] red_blue_random,int[] user_red_blue){
        int count_red = 0;
        int count_blue = 0;

        //开始记录红色球个数(两个数组的最后一个数都是blue值)
        for (int i = 0; i < red_blue_random.length - 1; i++) {
            for (int j = 0; j < user_red_blue.length - 1; j++) {
                if(red_blue_random[i] == user_red_blue[j]){
                    count_red++;
                }
            }
        }

        if(red_blue_random[red_blue_random.length-1] == user_red_blue[user_red_blue.length-1]){
            count_blue++;
        }
        //弄一个数组记录两个的值
        int[] red_or_blue_count = new int[]{count_red,count_blue};
        return red_or_blue_count;
    }

    //6个if条件语句
    public static void GET_money(int[] red_blue_count){
        //一等奖
        if(red_blue_count[0] == 6 && red_blue_count[1] == 1 ){
            System.out.println("1000万");
        }
        //二等奖
        else if(red_blue_count[0] == 6 && red_blue_count[1] == 0){
            System.out.println("500万");
        }
        //三等奖
        else if(red_blue_count[0] == 5 && red_blue_count[1] == 1){
            System.out.println("3000元");
        }
        //四等奖
        else if(red_blue_count[0] == 5 && red_blue_count[1] == 0 || red_blue_count[0] == 4 && red_blue_count[1] == 1){
            System.out.println("200元");
        }
        //五等奖
        else if(red_blue_count[0] == 4 && red_blue_count[1] == 0 || red_blue_count[0] == 3 && red_blue_count[1] == 1){
            System.out.println("10元");
        }
        //六等奖
        else if(red_blue_count[0] == 2 && red_blue_count[1] == 1 || red_blue_count[0] == 1 && red_blue_count[1] == 1 || red_blue_count[0] == 0 && red_blue_count[1] == 1){
            System.out.println("5元");
        }
    }

    //临时打印方法
    public static void print_array(int[] a){
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值