双色球的实现-日常java小案例

非常简单的双色球实现,每天一个小案例,记录学习


前言

双色球想必都听说过,现在用代码实现双色球。


一、双色球介绍

大家可以参考下面的图:顾名思义,双色球分为红球和蓝球,红球按照顺序排列,没有重复的数字,蓝球则没有限制。

在这里插入图片描述

二、代码实现

1 利用列表ArrayList实现

1.1 Random类实现

代码如下

public class Demo03 {
    public static void main(String[] args) {
        // 定义随机数对象
        Random ran = new Random();
        // 定义红球用的集合
        ArrayList<Integer> redBalls = new ArrayList<>();
        // 0 - 15 的值 + 1 就是 1 - 16
        // 随机生成篮球的号码
        int blueBall = ran.nextInt(16) + 1;

        // 不已知循环次数的时候使用 while 循环
        while (redBalls.size() < 6){
            // 生成一个1-33的随机值,但是不添加进去
            int t = ran.nextInt(33) + 1;
            // 如果这个值在集合中不存在(保证不重复)
            if(!redBalls.contains(t))
                // 添加进去
                redBalls.add(t);
        }

        // 对于红球进行升序排序
        Collections.sort(redBalls);

        //生成
        System.out.println("红球:" + redBalls + " | 篮球:" + blueBall);
    }
}

1.2 Math.random()实现

代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class Demo04 {
    public static void main(String[] args) {
        // 定义红球用的集合
        ArrayList<Integer> redBalls = new ArrayList<>();
        // 0 - 15 的值 + 1 就是 1 - 16
        // 随机生成篮球的号码
        /**
         * Math.random()生成0 - 1之间的值;
         * 0 - 1 之间的值 乘以 100 就是 0 - 100之间的值
         * 强制类型转换为整型得到 0 - 100 之间的整型数据
         * 任意的值除以 16 取余数 能得到的一定是 0 - 15 的值
         * 0 - 15 的值 + 1 就是 1 - 16
         */
        int blueBall = (int)(Math.random() * 100000) % 16 + 1;

        // 不已知循环次数的时候使用 while 循环
        while (redBalls.size() < 6){
            // 生成一个1-33的随机值,但是不添加进去
            int t = (int)(Math.random() * 100000) % 33 + 1;
            // 如果这个值在集合中不存在
            if(!redBalls.contains(t))
                // 添加进去
                redBalls.add(t);
        }

        // 对于红球进行升序排序
        Collections.sort(redBalls);

        // 红球
        System.out.println("红球:" + redBalls + " | 篮球:" + blueBall);
    }
}

2 利用数组实现

public class Test02 {
    public static void main(String[] args) {
        int[] red = new int[6];
        int j = 0;
        for(int i = 0 ; i < 6 ; i++){
            int t = (int)(Math.random() * 100 % 16) + 1;
            for(j = 0 ; j < i ; j++){
                if(t == red[j]){
                    //相等的话就直接退出
                    break;
                }
            }
            //i == j证明可以添加(没有重复的)
            if(j < i){//证明球重复了,不能添加
                i--;//重新生成
            }else{
                red[i] = t;//否则可以添加
            }
        }
//最简单的冒泡排序
        for(int i = 0 ; i < 5 ; i ++){
            for(int k = 0 ; k < 5 - i - 1; k++){
                if(red[k] > red[k + 1]){
                    red[k] ^= red[k + 1];
                    red[k + 1] ^= red[k];
                    red[k] ^= red[k + 1];
                }
            }
        }
        System.out.print("red: [");
        for(int i : red){
            System.out.print(i);
            if(i == red[red.length - 1]){
                System.out.println("]");
            }else{
                System.out.print(" ");
            }
        }
        System.out.println("blue: [" + (int)(100 * Math.random() % 16 + 1) + "]");
    }
}

总结

每天一个小案例,轻松学java,哈哈哈

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值