zoukankan      html  css  js  c++  java
  • 一个简单的随机函数工具类


    index.base.func.Random类:
    代码:public final class Random
    提供了9种静态方法来获取不同的随机值

    构造函数:
    public function Random()
    如果直接实例化该类,将抛出错误

    boolean静态属性:
    public static function get boolean():Boolean
    随机获取一个布尔值,即可能是true,也可能是false

    wave静态属性:
    public static function get wave():int
    随机获取一个正负波动值,即可能是1,也可能是-1

    integer静态方法:
    public static function integer(num:Number):int
    随机获取一个范围中的整数值

    number静态方法:
    public static function number(num:Number):Number
    随机获取一个范围中的Number指

    range静态方法:
    public static function range(num1:Number,num2:Number,isInt:Boolean = true):Number
    isInt:表示是否以整数随机
    随机在一个指定范围获取数值

    ranges静态方法:
    public static function ranges(...args):Number
    最后一个参数可以是逻辑值,用处等同于range的isInt参数,默认为true
    随机在多个指定范围获取数值

    string静态方法:
    public static function string(str:String = "0-9,A-Z,a-z"):String
    在指定范围随机一个字符

    bit静态方法:
    public static function bit(num:int,str:String = ""):String
    在指定范围随机一个num位的字符串

    color静态方法:
    public static function color(red:String = "0-255",green:String = "0-255",blue:String = "0-255"):uint
    在指定范围随机一个颜色值
    import index.base.func.Random;
    trace(Random.boolean+"(随机一个布尔值)");
    trace(Random.color()+"(随机一个RGB颜色值)");
    trace(Random.color("153-255","0-100","0-100")+"(随机一个偏红的RGB颜色值)");
    trace(Random.wave+"(随机一个波动值)");
    trace(Random.string()+"(随机一个字符)");
    trace(Random.integer(4)+"(随机一个int值)");
    trace(Random.number(4)+"(随机一个Number值)");
    trace(Random.string("a-z,A-Z")+"(在一个范围随机字符)");
    trace(Random.string("我,你,他")+"(在一个范围随机中文字符)");
    trace(Random.ranges(5,4,3,-1,-10,-14,true)+"(在多个指定范围随机数值)");
    trace(Random.range(4,9)+"(在一个指定范围随机数值)");
    trace(Random.bit(8)+"(随机一个八位的字符串)");
    trace(Random.bit(16,"0-1")+"(随机一个十六位的二进制)");
    trace("…………")
    
    //生成一个偏红的颜色色块
    var sh:Shape = new Shape();
    var rgb:uint = Random.color("204-255","0-153","0-153");
    trace(rgb1.toString(16));
    sh.graphics.beginFill(rgb);
    sh.graphics.drawRect(100,100,100,100);
    addChild(sh);
    
    //生成一个颜色偏深或者偏淡的颜色色块
    var sh1:Shape = new Shape();
    var rgb1:uint = Random.color("0-20,240-255","0-20,240-255","0-20,240-255");
    trace(rgb1.toString(16));
    sh1.graphics.beginFill(rgb1);
    sh1.graphics.drawRect(200,100,100,100);
    addChild(sh1);
    
    /**
     * 输出:
     * false(随机一个布尔值)
     * 8370486(随机一个RGB颜色值)
     * 12322387(随机一个偏红的RGB颜色值)
     * -1(随机一个波动值)
     * E(随机一个字符)
     * 3(随机一个int值)
     * 1.0007172282785177(随机一个Number值)
     * m(在一个范围随机字符)
     * 我(在一个范围随机中文字符)
     * -14(在多个指定范围随机数值)
     * 5(在一个指定范围随机数值)
     * idPJav1l(随机一个八位的字符串)
     * 1010100101010100(随机一个十六位的二进制)
     * …………
     * dd5506
     * fef003
     */
    
    
    package index.base.func{
        
        public final class Random{
            
            public function Random(){
                throw new Error("随机函数工具包无法实例化!");
            }
            
            //获取一个随机的布尔值
            public static function get boolean():Boolean{
                return Math.random() < 0.5;
            }
            
            //获取一个正负波动值
            public static function get wave():int{
                return boolean ? 1 : -1;
            }
            
            //获取一个随机的范围整数值
            public static function integer(num:Number):int{
                return Math.floor(number(num));
            }
            
            //获取一个随机的范围Number值
            public static function number(num:Number):Number{
                return Math.random() * num;
            }
            
            //在一个范围内获取一个随机值,返回结果范围:num1 >= num > num2
            public static function range(num1:Number,num2:Number,isInt:Boolean = true):Number{
                var num:Number = number(num2 - num1) + num1;
                if(isInt) num = Math.floor(num);
                return num;
            }
            
            //在多个范围获取随机值
            public static function ranges(...args):Number{
                var isInt:Boolean = args[args.length - 1] is Boolean ? args.pop() : true;
                var num:Number = randomRange(args);
                if(!isInt) num += Math.random();
                return num;
            }
            
            //获取一个随机字符,默认随机范围为数字+大小写字母,也可以指定范围,格式:a-z,A-H,5-9
            public static function string(str:String = "0-9,A-Z,a-z"):String{
                return String.fromCharCode(randomRange(explain(str)));
            }
            
            //生成指定位数的随机字符串
            public static function bit(num:int,str:String = "0-9,A-Z,a-z"):String{
                var reStr:String = "";
                for(var i:int = 0; i < num; i ++) reStr += string(str);
                return reStr;
            }
            
            //获取一个随机的颜色值
            public static function color(red:String = "0-255",green:String = "0-255",blue:String = "0-255"):uint{
                return Number("0x" + transform(randomRange(explain(red,false))) +
                                     transform(randomRange(explain(green,false))) +
                                     transform(randomRange(explain(blue,false))));
            }
            
            //将10进制的RGB色转换为2位的16进制
            private static function transform(num:uint):String{
                var reStr:String = num.toString(16);
                if(reStr.length != 2) reStr = "0" + reStr;
                return reStr;
            }
            
            //字符串解析
            private static function explain(str:String,isCodeAt:Boolean = true):Array{
                var argAr:Array = new Array;
                var tmpAr:Array = str.split(",");
                for(var i:int = 0; i < tmpAr.length; i ++){
                    var ar:Array = tmpAr[i].split("-");
                    if(ar.length == 2){
                        var arPush0:String = ar[0];
                        var arPush1:String = ar[1];
                        if(isCodeAt){
                            arPush0 = arPush0.charCodeAt().toString();
                            arPush1 = arPush1.charCodeAt().toString();
                        }
                        //此处如果不加1,将不会随机ar[1]所表示字符,因此需要加上1,随机范围才是对的
                        argAr.push(Number(arPush0),Number(arPush1) + 1);
                    }else if(ar.length == 1){
                        var arPush:String = ar[0];
                        if(isCodeAt) arPush = arPush.charCodeAt().toString();
                        //如果范围是1-2,那么整型随机必定是1,因此拿出第一个参数后,把范围定在参数+1,则就是让该参数参加随机
                        argAr.push(Number(arPush),Number(arPush) + 1);
                    }
                    ar = null;
                }
                tmpAr = null;
                return argAr;
            }
            
            //获取随机范围
            private static function randomRange(ar:Array):Number{
                var tmpAr:Array = new Array;
                var length:int = ar.length;
                if(length % 2 != 0 || length == 0) throw new Error("参数错误!无法获取指定范围!");
                //将所有可能出现的随机数存入数组,然后进行随机
                for(var i:int = 0; i < length / 2; i ++){
                    var i1:int = ar[i * 2];
                    var i2:int = ar[i * 2 + 1];
                    if(i1 > i2){
                        var tmp:Number = i1;
                        i1 = i2;
                        i2 = tmp;
                    }
                    for(i1; i1 < i2; i1 ++) tmpAr.push(i1);
                }
                var num:Number = tmpAr[integer(tmpAr.length)];
                tmpAr = null;
                ar = null;
                return num;
            }
            
        }
        
    }
    
  • 相关阅读:
    (重要)1
    大数据技术
    条件随机场之CRF++源码详解-预测
    条件随机场之CRF++源码详解-训练
    条件随机场之CRF++源码详解-特征
    条件随机场之CRF++源码详解-开篇
    这个更新需要花去 50.6 M 磁盘上总计 /boot 的空间。请在 7737k 磁盘上留出 /boot 空间。清空您的回收站和临时文件,用“sudo apt-get clean
    多线程:pthread_exit,pthread_join,pthread_self
    error: ‘for’ loop initial declarations are only allowed in
    多线程
  • 原文地址:https://www.cnblogs.com/602147629/p/1989945.html
Copyright © 2011-2022 走看看