随机数

java的随机数真的非常易于使用。它可以让你模拟准确的统计样本、实现加密算法,最重要的是,你可以不假思索地使用。在Java中,访问随机数的常用方法是通过一个名为 java.util.Random的类。您可以使用一个种子数或当前时间来实例化它,然后您就有了一系列的值,你可以很轻易的访问这些值,方法如下:

Random random = new Random();
// Prints out either 0 or 1
System.out.println(random.nextInt(2));

用户参与时间

如果您的期望没有因以下问题而产生偏差:您可以打印以下代码:

public static void main(String[] args) {int start = 0;int end = 1000;int countOnes = 0;for (int i = start; i < end; i++) {countOnes += new Random(i).nextInt(2);}System.out.println(countOnes);
}

如果我们运行该程序,我们会得到一下结果:

 1000

这太令人惊讶了——如果你问我预期的数字是多少,我会告诉你,我不能给你一个确切的数字,但我预计大约是500。这是基于这样一个假设,以为随机数的概率吩咐符合均匀分布,因此结果为1和0的概率都是50%。它不会精确地计算出500,但如果样本量为1000,那么总数将接近500。如果我们将终点值更改为4000,则会得到:

4000

再次调用nextInt(2)应该返回一个介于0和1之间的随机数,但它只返回1。我们设置,起点为4000,终点为5000,结果又会怎么样呢?

96

好的,我现在有更多的零,但比我预期的要少很多。

为什么会这样?

人们通常将基于计算机的随机数生成器称为伪随机数生成器,但它很少描述伪随机的实际含义。在这种情况下,我们真正的意思是,我们有一个算法,这个算法产生一个确定性的数字序列,这个序列是由一个种子数初始化的。这个序列看起来很随机,但它只是表面现象。上面的小程序所做的只是从序列中抽取第一个随机数。

这是一个简单的算法,但它确实引发了一些有趣的问题,java.util.Random使用线性同余生成器生成其数字,其优点是简单快速。不幸的是,这样做的代价是它不是很随机的——即使程序员正确地使用它。它也根本不适合蒙特卡罗模拟或晶体算法。

这也不是Java特有的问题python的早期版本使用了Wichmann&Hill 1982年的算法。这会受到短期影响,这意味着数字在一段时间后开始重复。最近的版本使用Mersenne Twister作为其算法,该算法具有更好的特性,但仍然不适合用于加密。

总结

在所有这些情况下需要记住的是,伪随机数不是随机数,如果您关心统计随机性,那么您需要在算法选择和实现使用方面都加以注意。

JAVA随机数真的随机吗?相关推荐

  1. java随机数_Java随机

    java随机数 Java Random class is used to generate a series of random numbers. Java Random类用于生成一系列随机数. Ja ...

  2. Python的random内置模块产生的随机数真的随机吗?

    先说结论:不止Python的random内置模块,还包括numpy的随机抽样子模块random,以及其他编程语言的随机数生成器,例如java.Math.Random()函数,所有这些随机数生成器生成的 ...

  3. Java生成随机数并随机输出不重复的值

    一个小Demo,网上有很多类似的代码,测试了一下网上的代码为了让随机输出值不重复,重复循环达到目的的效果,但循环次数过多严重影响性能. 通过ArrayList的remove方法实现了生成随机数并随机输 ...

  4. 000.【Web安全】你所使用的随机数真的安全吗?

    文章目录 1.概述 2.名词解释 3.随机数存在的安全风险 3.1 弱伪随机数带来的安全风险 3.2 真随机数真的安全吗 4.随机数 4.1 什么情况下才使用随机数 4.2 伪随机数 4.2.1 弱伪 ...

  5. java随机数转换_Java获取随机数的3种方法(转)

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  6. java 随机数 【指定范围】

    在Java中我们可以使用java.util.Random类来产生一个随机数发生器.它有两种形式的构造函数,分别是Random()和Random(long seed).Random()使用当前时间即Sy ...

  7. (转)Java随机数

    1 随机数的三种产生方式 本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式: (01). 通过System.currentTimeMil ...

  8. 硬核 - Java 随机数相关 API 的演进与思考(上)

    本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...

  9. java随机数代码解析,实例解析常用的java随机数生成办法

    随机数是任何一种编程语言最基本的特征之一,在技术开发中应用很广泛,因为有时我们需要随机生成一个固定长度的数字.字符串亦或者是需要随机生成一个不定长度的数字.或者进行一个模拟的随机选择等.Java就为我 ...

最新文章

  1. 前端工程化系列[02]-Grunt构建工具的基本使用
  2. C语言告警warning: missing braces around initializer详解
  3. 软件层面可以做到重启本地串口吗_手机关机还是重启好?get这几招,手机更流畅...
  4. 程序员面试金典 - 面试题 04.04. 检查平衡性(二叉树高度)
  5. Linux移植随笔:终于解决Tslib的问题了
  6. TypeScript 3.9 发布
  7. CentOS 7.1 Bridge启用STP报错Master connection not found or invalid
  8. 网易裁员事件双方和解;华为回应「推文攻击苹果」;PHP 7.4.0 发布 | 极客头条...
  9. 中国无人车第一案!百度状告景驰王劲:窃取机密,不还电脑,索赔5000万
  10. “Head First 设计模式“ :策略模式
  11. 升级python到2.7版本pip不可用
  12. 使用UltraISO制作LINUX安装U盘(未成功)
  13. java的addattribute_Java AttributeSet.addAttributeListener方法代码示例
  14. jsonp 跨域 java_浅析 JSONP 跨域原理
  15. win10显示WiFi已连接但无法访问互联网?
  16. Elasticsearch _reindex Alias使用
  17. 利用Python提取函数图像数据并拟合曲线
  18. 中国跨境电商现状及发展前景
  19. 电子邮件协议---SMTP,POP3,IMAP,MIME
  20. speedoffice(Word)怎么修改字体颜色呢

热门文章

  1. 人工智能之卡尔曼滤波入门
  2. python 互相关的实现
  3. 学IT上培训班没用吗?
  4. Vivado pcie_can_bd.bd 代码
  5. 图表控件AnyChart教程:如何制作 JavaScript 极坐标图(二)
  6. referer详细解析
  7. MySQL分表后的ID怎么保证唯一性,非sharding_key查询怎么处理
  8. Java图形化界面GUI:初接触
  9. Ubuntu 20.04 开启 root 远程登录
  10. 域名怎么买:一口价购买!