`
xiaocao000
  • 浏览: 227219 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

SimpleRandom.java

阅读更多
/*
 * SimpleRandom.java xiaocao000 2009-7-30
 */
package com.xiaocao000.lang;

import java.util.Calendar;
import java.util.Date;

/**
 * 简单随机数生成工具。
 * 
 * @author xiaocao000
 */
public class SimpleRandom
{
    private static final int BUFSIZE = 100;
    private static double[] buf = new double[BUFSIZE];
    static
    {
        for (int i = 0; i < buf.length; i++)
        {
            buf[i] = Math.random();
        }
    }

    /**
     * 获取一个随机byte值。
     * 
     * @return 随机byte值。
     */
    public static byte getByte()
    {
        return (byte) (nextRandom() * Byte.MAX_VALUE);
    }

    /**
     * 获取一个介于[min, max)之间的随机byte值。
     * 
     * @param min
     *            随机byte值的下限(包含)
     * @param max
     *            随机byte值的上限(不包含)
     * @return 介于[min, max)之间的随机byte值。
     */
    public static byte getByte(byte min, byte max)
    {
        return (byte) (nextRandom() * (max - min) + min);
    }

    /**
     * 获取一个随机short值。
     * 
     * @return 随机short值。
     */
    public static short getShort()
    {
        return (short) (nextRandom() * Short.MAX_VALUE);
    }

    /**
     * 获取一个介于[min, max)之间的随机short值。
     * 
     * @param min
     *            随机short值的下限(包含)
     * @param max
     *            随机short值的上限(不包含)
     * @return 介于[min, max)之间的随机short值。
     */
    public static short getShort(short min, short max)
    {
        return (short) (nextRandom() * (max - min) + min);
    }

    /**
     * 获取一个随机int值。
     * 
     * @return 随机int值。
     */
    public static int getInt()
    {
        return (int) (nextRandom() * Integer.MAX_VALUE);
    }

    /**
     * 获取一个介于[min, max)之间的随机int值。
     * 
     * @param min
     *            随机int值的下限(包含)
     * @param max
     *            随机int值的上限(不包含)
     * @return 介于[min, max)之间的随机int值。
     */
    public static int getInt(int min, int max)
    {
        return (int) (nextRandom() * (max - min) + min);
    }

    /**
     * 获取一个随机float值。
     * 
     * @return 随机float值。
     */
    public static float getFloat()
    {
        return (float) (nextRandom() * Float.MAX_VALUE);
    }

    /**
     * 获取一个介于[min, max)之间的随机float值。
     * 
     * @param min
     *            随机float值的下限(包含)
     * @param max
     *            随机float值的上限(不包含)
     * @return 介于[min, max)之间的随机float值。
     */
    public static float getFloat(float min, float max)
    {
        return (float) (nextRandom() * (max - min) + min);
    }

    /**
     * 获取一个随机long值。
     * 
     * @return 随机long值。
     */
    public static long getLong()
    {
        return (long) (nextRandom() * Long.MAX_VALUE);
    }

    /**
     * 获取一个介于[min, max)之间的随机long值。
     * 
     * @param min
     *            随机long值的下限(包含)
     * @param max
     *            随机long值的上限(不包含)
     * @return 介于[min, max)之间的随机long值。
     */
    public static long getLong(long min, long max)
    {
        return (long) (nextRandom() * (max - min) + min);
    }

    /**
     * 获取一个随机double值。
     * 
     * @return 随机double值。
     */
    public static double getDouble()
    {
        return (double) (nextRandom() * Double.MAX_VALUE);
    }

    /**
     * 获取一个介于[min, max)之间的随机double值。
     * 
     * @param min
     *            随机double值的下限(包含)
     * @param max
     *            随机double值的上限(不包含)
     * @return 介于[min, max)之间的随机double值。
     */
    public static double getDouble(double min, double max)
    {
        return (double) (nextRandom() * (max - min) + min);
    }

    /**
     * 获取一个随机boolean值。
     * 
     * @return 随机boolean值
     */
    public static boolean getBoolean()
    {
        return nextRandom() > 0.5;
    }

    /**
     * 获取一个随机小写字母Character[a-z]值。
     * 
     * @return 随机Character值
     */
    public static char getLowerCharacter()
    {
        return (char) (getInt(0, 26) + 'a');
    }

    /**
     * 获取一个随机大写字母Character[A-Z]值。
     * 
     * @return 随机Character值
     */
    public static char getUpperCharacter()
    {
        return (char) (getInt(0, 26) + 'A');
    }

    /**
     * 获取一个随机字母Character[A-Z|a-z]值。
     * 
     * @return 随机Character值
     */
    public static char getCharacter()
    {
        // return getBoolean() ? getLowerCharacter() : getUpperCharacter();
        return (char) (getInt(0, 26) + (getBoolean() ? 'A' : 'a'));
    }

    /**
     * 返回一个长度为8的包含大小写字母的随机字符串。
     * 
     * @return String
     */
    public static String getString()
    {
        return getString(8);
    }

    /**
     * 返回指定长度的包含大小写字母的随机字符串。
     * 
     * @return String
     */
    public static String getString(int len)
    {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < len; i++)
        {
            sb.append(getCharacter());
        }
        return sb.toString();
    }

    /**
     * 获取随机的Calendar对像,年份介于[1970,2050]。
     * @return 随机的Calendar对像
     */
    public static Calendar getCalendar()
    {
        Calendar calendar = Calendar.getInstance();
        calendar.set(getInt(1970, 2051), getInt(0, 12), getInt(1, 32), 
                getInt(0, 24), getInt(0, 60), getInt(0, 60));

        return calendar;
    }
    
    
    /**
     * 获取随机java.util.Date对象,年份介于[1970,2050]。
     * @return 随机java.util.Date对象
     */
    public static Date getDate()
    {
        return getCalendar().getTime();
    }

    /**
     * 从随机数缓冲区获取一个double随机数。
     * 
     * @return double随机数。
     */
    private static double nextRandom()
    {
        int index = (int) (Math.random() * BUFSIZE);
        // if (index == BUFSIZE)
        // {
        // index = BUFSIZE - 1;
        // }
        double result = buf[index];
        buf[index] = Math.random();
        return result;
    }

}

分享到:
评论

相关推荐

    SimpleRandom:심심해서로종류별

    标题 "SimpleRandom:심심해서로종류별" 暗示了这是一个关于 C# 编程中的随机数生成器的讨论,特别是 "SimpleRandom" 这个自定义类或者方法,可能是为了实现不同类型的随机数生成。描述部分虽然较为空泛,但我们可以...

    android-simple-random-color-app:简单的Android随机色彩应用

    - **MainActivity.java**: 应用的主活动,通常负责处理UI和业务逻辑。 - 可能有一个 `ColorGenerator` 类,用于生成随机颜色。 4. **build.gradle**: 构建脚本,定义依赖库和构建设置。 5. **gradle.properties** ...

    Font Awesome图标字体库提供可缩放矢量图标,它可以被定制大小、颜色、阴影以及任何可以用CSS的样式

    Font Awesome图标字体库提供可缩放矢量图标,它可以被定制大小、颜色、阴影以及任何可以用CSS的样式

    EDAfloorplanning

    介绍了physical design的floorplanning问题

    数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 最低生活保障问题的探索 共20页.pdf

    数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 最低生活保障问题的探索 共20页.pdf

    变更用水性质定额申请表.xls

    变更用水性质定额申请表.xls

    GitHub Desktop版快速下载

    从官网上下载下来,作为资源存储,方便安装,此资源为windows版本

    嗨玩旅游网站-JAVA-基于springboot嗨玩旅游网站设计与实现(毕业论文+PPT)

    嗨玩旅游网站-JAVA-基于springboot嗨玩旅游网站设计与实现(毕业论文+PPT)

    本科毕业设计 基于Python中国知网(cnki)爬虫及数据可视化详细文档+全部资料.zip

    【资源说明】 本科毕业设计 基于Python中国知网(cnki)爬虫及数据可视化详细文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    三菱plc基于mx组件的通用访问远程api接口

    api代码

    基于 Java 实现的24点卡牌游戏课程设计

    【作品名称】:基于 Java 实现的24点卡牌游戏【课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: Java小游戏--24点卡牌游戏 将扑克牌(除大小王)随机打乱,每次出现4张卡牌,每张卡牌使用一次,13个回合。 A代表1,J代表11,Q代表12,K代表13。 可2-4人局域网同时在线对战,100秒倒计时结束前回答正确可获得积分,先回答的可获4分,后回答的分数依次递减。 实时显示玩家排名。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    用 Python 实现的可扩展布隆过滤器.zip

    用 Python 实现的可扩展布隆过滤器皮布卢姆pybloom是一个包含 Bloom Filter 数据结构以及可扩展 Bloom Filter 实现的模块,如下所述P. Almeida、C.Baquero、N. Preguiça、D. Hutchison,可扩展布隆过滤器,(GLOBECOM 2007),IEEE,2007。如果您了解需要提前留出多少位来存储整个集合,那么布隆过滤器就是您的不二之选。可扩展布隆过滤器允许您的布隆过滤器位根据误报概率和大小进行增长。当过滤器达到容量上限时,即为“满”M * ((ln 2 ^ 2) / abs(ln p)),其中 M 是位数,p 是误报概率。当达到容量上限时,将创建一个比上一个过滤器大得多的新过滤器,其误报概率更小,哈希函数数量更多。>>> from pybloom import BloomFilter>>> f = BloomFilter(capacity=1000, error_rate=0.001)>>> [f.add(x) for x in range(10)][False, False, False,

    计算机学院宿舍美化大赛.rar

    计算机学院宿舍美化大赛.rar

    基于java的运动器械购物商城设计与实现.docx

    基于java的运动器械购物商城设计与实现.docx

    基于PBL-CDIO的材料成型及控制工程课程设计实践与改革

    内容概要:文章介绍了针对“卓越工程师教育培养计划”,结合PBL和CDIO工程教育理念,对材料成型及控制工程专业课程设计的实践教学改革进行探索。首先在命题设计上依托企业实践项目,确保设计内容与生产实际紧密结合,具有较强的创新性和实用性。在过程管理中,采用分组合作和面向实际问题导向的教学方法,提升学生的工程素养和创新思维。通过课程设计的成绩考核,结合校内外导师的共同评价,客观全面衡量学生的学习成果。指导教师发挥了组织、支持和引导等多方面的角色作用。 适合人群:高等院校材料成型及控制工程专业学生和教学管理人员;工程教育领域的研究人员。 使用场景及目标:旨在提升工科学生的工程实践能力和创新能力,使其具备解决复杂实际工程问题的能力。通过改革教学内容和方法,改善传统课程设计中存在的不足,培养出高素质的技术人才。 其他说明:改革措施在实际运行中取得了较好的教学效果,提高了学生的就业竞争力,但仍存在一些不足之处需要在未来进行完善。

    设计模式学习.zip

    设计模式学习

    C的两数相加求和的程序代码

    C的两数相加求和的程序代码

    Viper是一个基于Anno微服务引擎开发的Dashboard示例项目。Anno底层通讯采用grpc、thrift.zip

    Viper是一个基于Anno微服务引擎开发的Dashboard示例项目。Anno底层通讯采用grpc、thrift

    本教程播放列表涵盖了 Python 中的数据结构和算法 每个教程都有数据结构或算法背后的理论、BIG O 复杂性分析和可供练习的练习 .zip

    本教程播放列表涵盖了 Python 中的数据结构和算法。每个教程都有数据结构或算法背后的理论、BIG O 复杂性分析和可供练习的练习。使用 Python 的数据结构和算法本教程涵盖了 Python 中的数据结构和算法。每个教程都包含数据结构或算法背后的理论、BIG O 复杂度分析以及可供练习的练习。要观看视频,您可以访问播放列表https://www.youtube.com/playlist?list=PLeo1K3hjS3uu_n_a__MI_KktGTLYopZ12订阅 codebasics youtube 频道https://www.youtube.com/c/codebasics

    python入门-安装Python软件包.pdf

    python入门——安装Python软件包

Global site tag (gtag.js) - Google Analytics