是否可以让用户选择一个随机数的位数,特别是一个随机的大整数? 例如,如果用户希望长度为15位,则随机数生成器将只生成15位长的Big Integer。

看看Jon Skeets对stackoverflow.com/questions/2290057/的回答

您可以使用BigInteger的构造函数来指定二进制数字的数量:BigInteger(int numBits, Random rnd)。用户所需的每三个十进制数字大约需要十个二进制数字。例如,如果您需要30位随机数BigInt,请使用100位二进制数。

您可以使用remainder(10^30)切断不必要的数字,并循环执行以确保初始数字不为零,并确保数字正确,如下所示:

Random rnd = new Random(123);

BigInteger tenPow30 = new BigInteger("10").pow(30);

BigInteger min = new BigInteger("10").pow(29);

BigInteger r;

do {

r = new BigInteger(100, rnd).remainder(tenPow30);

} while (r.compareTo(min) < 0);

System.out.println(r);

链接到演示。

是什么阻止上述代码生成不是30位数字的0结果?

@codaddict可以说是30位零的30位随机数。如果您不希望30位数字中的前导零,则始终可以循环运行它。

是的,不仅需要检查所有零,还需要检查1 ^ 30以下生成的任何数字。

@codaddict我添加了一个循环以确保数字的前导位置不包含零。

循环运行它可以使它以适当的随机值无限循环。我同意@codaddict的观点,实际上,如果BigInteger.toString().length() < digits为true,则需要再次运行此代码。实际上,发生环路的可能性几乎为50%。

@Brian这就是代码在不将其转换为字符串的情况下所要做的。仅当随机数生成器无限坏时,该代码才能无限运行。

@dasblinkenlight毕竟,这不是一个很好的解决方案,因为所花费的时间是任意的,并且无法在不知道RNG确切概率的情况下进行计算。最好简单地检查第一个数字是否为0,如果不是,则在其位置放一个不同的随机非零数字。

@Brian可以先生成一个29位数字,再生成一个1位数字,然后将它们组合为30位数字,而无需进行任何检查。

我想我更喜欢29 + 1的方法,因为您可以肯定只需要运行一次代码。

您始终可以随机生成数字的各个数字。这样,对于15位数字,您可以随机生成15位数字,然后形成数字。

其他方式:

让我们更改问题以生成随机的5位数字。

Min = 10000

Max = 99999

现在在0和Max - Min之间生成一个随机数,即0和89999,并将其添加到Min。

Random = Min + Math.random() * (Max - Min)

我喜欢这个简单的解决方案!没有循环或其他任何东西,只是简单而简单的数学:)

步骤如下:

产生n个数字

使用StringBuilder组合它们

使用BigInteger(String)创建您的号码

这是一些代码:

public static BigInteger randomBigInt(int digits, Random rand) {

StringBuilder sb = new StringBuilder(digits);

// First digit can't be 0

sb.append(rand.nextInt(9) + 1);

int limit = digits - 1;

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

sb.append(rand.nextInt(10));

return new BigInteger(sb.toString());

}

这将分别生成每个数字并将其添加到StringBuilder(而不是int之类的东西,这可能会产生缓冲区溢出问题),然后使用生成的String创建BigInteger。另请注意,第一位永远不会为0。

嗯,这个答案可以计算小于n位数字的数字。生病了改变我的答案。抱歉:X

在那里,我修复了它。

使用类似于此处的RandomUtil类的Random Generator,您可以在一些值和更多值之间创建随机数。

例如,使用此代码的范围为15位数字

最小值= 100000000000000最大值= 999999999999999:

BigInteger number = RandomUtil.getRandomBigInteger(new BigInteger("100000000000000"), new BigInteger("999999999999999"), false);

java90到100随机数生成器_Java随机数生成器相关推荐

  1. java 随机数 分布_java – 随机数的分布

    My real question is whether option 1 is mathematically valid. 让我们从选项2开始.java.util.Random使用的随机数生成器在ja ...

  2. java随机数 范围_java随机数产生的范围该怎么定义?

    随机数的范围有时是需要控制的,不然会很浪费资源,这次的题目小编就来带大家看看如何在指定范围内获取随机数. 例1:随机生成 1~100 之间的随机数,取值包含边界值 1 和 100. 如生成范围是[m, ...

  3. java随机数 时间_Java 随机数

    在 Java 编程时,经常需要用到随机数,如生成验证码.密码加密.游戏道具随机掉落等,那么在 Java 语言中如何生成随机数? Java 语言中有两种方法可能生成随机数 方法一:Math.random ...

  4. java 10个随机数排序_java随机数排序的问题

    java随机数排序的问题 关注:68  答案:4  mip版 解决时间 2021-01-27 15:23 提问者侢遇噹姩揂 2021-01-27 08:24 public class RN { pub ...

  5. java随机数函数_java随机函数详解

    本文主要介绍java里的一些随机函数实现与用法,也会附带介绍一些随机数知识. 目前计算机实现的随机函数过程中,都是伪随机的,不过,可以实现统计学意义上的随机.比如手机鼠标移动位置,点击,系统的参数等等 ...

  6. php 随机数rand,PHP随机数函数rand()与mt_rand() - 米扑博客

    PHP 中 rand()与mt_rand()都是用于产生一个指定范围内单独随机数的函数,如果需要产生多个不重复的随机数,请参考:PHP生成指定范围内的N个不重复的随机数. 既然他们都是用于产生一个随机 ...

  7. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  8. python 生成器原理_python生成器

    基础知识 生成器是python的一个特别特的特性,在许多场合都有重要应用.比如range函数产生的就是一个生成器.其主要的好处就是降低了内存的占用.为什么呢?拿range函数来讲吧,它的目的是生成一系 ...

  9. python生成器表达式_python 生成器和生成器表达式

    1.生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创建 其实就是 ...

最新文章

  1. java 头尾 队列_记一次腾讯面试,我挂在了最熟悉不过的队列上
  2. 修改自动生成get/set方法模板代码
  3. SQL一对多特殊查询,取唯一一条
  4. python读取excel表格-python读写Excel表格的实例代码(简单实用)
  5. lz0-007 读书笔记09
  6. 基于云的SD-WAN骨干接入服务
  7. swap 将硬盘变内存
  8. Codeforces Round #515 (Div. 3)【未完结】
  9. 升级 ServeRADI-8i控制器,使用IBM 3650 9797 老服务器支持2T 硬盘
  10. 一般单纯形法的matlab程序,实验报告(单纯形法的matlab程序)
  11. 通过反射运行配置文件内容
  12. idea工作台输出的日志详解_详解linux下nohup日志输出过大问题解决方案--分批切割...
  13. iOS原生推送(APNS)进阶iOS10推送图片、视频、音乐
  14. html5中box-shadow,CSS阴影效果(Box-shadow)用法趣味讲解
  15. 优化技巧:提前if判断帮助CPU分支预测
  16. unity3D游戏制作—暗黑战神DarkGod
  17. Linux操作系统安装教程
  18. ansys怎么合并体_ansys模型合并
  19. 双链路是什么意思_双链路DVI是什么意思 工作原理是什么
  20. word文档字不靠边_Word打印字体靠右怎么办

热门文章

  1. BIM设计师斑马:从零开始,掌握以Revit为对象的BIM平台
  2. vs2015编写python爬虫_使用Python抓取网页数据(一)
  3. 水晶报表对数据进行排序时排序顺序
  4. listView 的item最外层添加了layout_marginLeft不管用
  5. python教程79--A4纸增值税电子发票合并打印
  6. oracle insert into insert,总结下Oracle 中的Insert用法
  7. A. PizzaForces
  8. STL:bitset用法详解
  9. pidstat_Linux查看某个进程的磁盘IO读写情况 pidstat
  10. 泛目录程序/泛目录解析/莲花泛目录解析/寄生虫/黑帽SEO