多种生成随机数实现方法

作者:袖梨 2022-06-25

阻塞当前线程一小段时间

random rnd1 = new random(); 

system.threading.thread.sleep(500); 

random rnd2 = new random();

或者:应用一个算法来区分每个调用的种子值。

例如,下面的代码使用右移位运算符为多个可以使用相同时间值初始化的 random 对象(在 1 和大约 28 个对象之间)生成不同的种子值。

int count = 4; 

random[] rnds = new random[count]; 

  

for (int i = 0; i < count; i++) 

    rnds[i] = new random(unchecked((int)(datetime.now.ticks >> i))); 

}

5:用随机数填充指定字节的数组

random rnd = new random(); 

  

// 数组长度自定义  

byte[] bs = new byte[9999]; 

  

// 字节数组的每个元素均设置为一个大于等于零而小于或等于 maxvalue 的随机数。maxvalue=255,可取上界值  

rnd.nextbytes(bs);

6:生成大于等于 0.0 小于 1.0 的双精度浮点数

random rnd = new random(); 

  

// 大于等于 0.0 并且小于 1.0 的双精度浮点数。  

double d = rnd.nextdouble(); 

  

// 格式化为 5 位小数,当然还有更多种格式化  

string s = string.format("{0:f5}", d);

7:生成随机整数

random rnd = new random(); 

  

// 大于等于零且小于 maxvalue 的 32 位带符号整数。maxvalue=2,147,483,647,不可取上界值  

int i1 = rnd.next(); 

  

// 大于等于零且小于 maxvalue 的 32 位带符号整数,不可取上界值  

int i2 = rnd.next(10); 

  

// 一个大于等于 minvalue 且小于 maxvalue 的 32 位带符号整数,不可取上界值,可以取负值  

int i3 = rnd.next(-10, 100);

8:生成随机大写字母

public string getuppercase(random rnd) 

    // a-z  ascii值  65-90  

    int i = rnd.next(65, 91); 

    char c = (char)i; 

    return c.tostring(); 

}

 9:生成随机小写字母

public string getlowercase(random rnd) 

    // a-z  ascii值  97-122  

    int i = rnd.next(97, 123); 

    char c = (char)i; 

    return c.tostring(); 

}

10:生成随机大小写字母混合

public string getletter(random rnd) 

    // a-z  ascii值  65-90 

    // a-z  ascii值  97-122 

    int i = rnd.next(65, 123); 

    char c = (char)i; 

    if (char.isletter(c)) 

    { 

        return c.tostring(); 

    } 

    else

    { 

        // 递归调用,直到随机到字母 

        return getletter(rnd); 

    } 

}

11:生成随机大小写字母和数字混合

public string getchar(random rnd) 

    // 0-9 

    // a-z  ascii值  65-90 

    // a-z  ascii值  97-122 

    int i = rnd.next(0, 123); 

    if (i < 10) 

    { 

        // 返回数字 

        return i.tostring(); 

    } 

  

    char c = (char)i; 

  

    // 返回小写字母加数字 

    // return char.islower(c) ? c.tostring() : getchar(rnd); 

  

    // 返回大写字母加数字 

    // return char.isupper(c) ? c.tostring() : getchar(rnd); 

  

    // 返回大小写字母加数字 

    return char.islower(c) ? c.tostring() : getchar(rnd); 

}

12:其它随机生成方案

数组方式:略

字符串方式:

string str = @"0123456789abcdefghigklmnopqrstuvwxyzabcdefghigklmnopqrstuvwxyz"; 

  

public string getmix(random rnd) 

    // 返回数字 

    // return rnd.next(10).tostring(); 

  

    // 返回小写字母 

    // return str.substring(10+rnd.next(26),1); 

  

    // 返回大写字母 

    // return str.substring(36+rnd.next(26),1); 

  

    // 返回大小写字母混合 

    // return str.substring(10+rnd.next(52),1); 

  

    // 返回小写字母和数字混合 

    // return str.substring(0 + rnd.next(36), 1); 

  

    // 返回大写字母和数字混合 

    // return str.substring(0 + rnd.next(36), 1).toupper(); 

  

    // 返回大小写字母和数字混合 

    return str.substring(0 + rnd.next(61), 1); 

}

相关文章

精彩推荐