java中的随机数,java.lang.Math.random()和java.util.Random.nextDouble()

Math.random()方法是生成0.0---1.0区域内的随机数,每次返回的数值都是不一样,应该可以算作随机数,

而Random类,如果初始化时候new Random(12).nextDouble()是这样设置的int seed  这个值一直是12,那么,不论循环多少次,多长时间间隔,

  生成的第一个随机数即第一次调用nextDouble()方法返回的结果都是一样的。这个是因为,这个生成的随机数是通过    12这个seed为参数,调用特定算法生成了,所以不论怎样,生成的数值都是一样,这个算伪随机数

Math.random()方法内部其实也是调用的Random类的nextDouble()方法。只不过其调用的是无参的构造方法

    /**
* Creates a new random number generator. This constructor sets
* the seed of the random number generator to a value very likely
* to be distinct from any other invocation of this constructor.
*/
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}

这个方法会调用时间戳还有原子seeduniquifier()方法进行seed参数的初始化,所以Math.random()方法每次生成的数据都是不一样的

根据网上说法:发现java中的随机方法是相对意义上的真随机数,也就是伪随机数。

Random类构造方法带固定参数,

黑客可以通过生成的随机序列反推出这个随机种子,也就是seed参数的值,从而预测出下一个产生的随机序列数

如下面,生成1到100的随机数,并统计1到100随机出现的次数。

public class RandomTest {
static Random random = new Random(10);
public static void main(String[] args) {
int[] count = new int[100];
for (int i = 0; i < 100000; i++) {
//System.out.println(Math.random() * 10 + "工具类:" + random.nextInt(5));
int number = random.nextInt(100) + 1;
//System.out.println("生成随机数为:"+number);
count[number - 1]++;
} for (int i = 0; i < 100; i++) {
System.out.println("数字" + i + 1 + ":" + count[i]);
}
}
}

重复执行多次各个数据出现的次数都是一样了。下面是返回的结果,两次返回的结果是一样的

数字86:992
数字87:996
数字88:998
数字89:1037
数字90:899
数字91:987
数字92:988
数字93:978
数字94:981
数字95:1001
数字96:985
数字97:1019
数字98:1018
数字99:930
数字100:962

所以使用随机数的时候最好默认使用空的构造方法,就可以防止数据出现次数相同

new Random();

java学习-java.lang.Math随机数生成的更多相关文章

  1. [Java学习] Java虚拟机(JVM)以及跨平台原理

    相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...

  2. java学习-java.lang一Number类

    java.lang包是java语言中被用于编程的基本包.编写的程序基本上都要用到这个包内的常用类. 包含了基本数据类型包装类(Boolean,Number,Character,Void)以及常用类型类 ...

  3. java学习——java中的反射学习笔记

    Java--reflect 一.Class类的使用 什么是Class类? 1:在面向对象的世界中,万事万物皆对象. java语言中,静态的成员,普通数据类型类是不是对象呢? 是,对象!是类的对象! 类 ...

  4. 【转】Java学习---Java Web基础面试题整理

    [原文]https://www.toutiao.com/i6592359948632457731/ 1.什么是Servlet? 可以从两个方面去看Servlet: a.API:有一个接口servlet ...

  5. 【转】Java学习---Java中volatile关键字实现原理

    [原文]https://www.toutiao.com/i6592879392400081412/ 前言 我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.c ...

  6. [Java学习] Java Object类

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: 1 ...

  7. [Java学习] Java字符串(String)

    从表面上看,字符串就是双引号之间的数据,例如“微学苑”.“http://www.weixueyuan.net”等.在Java中,可以使用下面的方法定义字符串: String stringName = ...

  8. Java学习----Java概述

    一.常用DOS命令 d:      盘符切换 dir(directory)  列出当前目录下的文件以及文件夹 md (make directory)  创建目录 rd (remove director ...

  9. JAVA学习-JAVA环境准备

    dir:列出当前目录下的文件以及文件夹md:  创建目录rd:  删除目录cd: 进入指定的目录,打开文件夹cd..:退回到上一级目录cd/或cd\:退回到根目录del:删除文件d: : 切换到D盘根 ...

随机推荐

  1. Android-项目所有文件报红色j,状态栏无法Run 'app'

    项目所有文件报红色j,不可用状态 状态栏如下: 无法 Run 'app' 无法 Debug 'app' ........... 以下操作按钮灰色的,无法点击: 解决方案: 只需要:Sync Proje ...

  2. Get size of all tables in database

    http://stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database SELECT t.NAME AS Table ...

  3. TFS支持移动设备,微软已经走出了第一步(手机上更新、查询工作项)

    TFS支持移动设备,微软已经走出了第一步! 从现在开始,你可以在手机浏览器上打开自己的VSTS团队项目,会看大手机版的工作项界面,你可以在手机设备上更新.查询工作项. 这是原生自带的,这些移动功能马上 ...

  4. 在循环中使用鼠标悬停时表示当前悬停选中,传入this关键字即可

    在前端循环中使用鼠标悬停事件 <div class="message-widget contact-widget"> <!-- Message --> {% ...

  5. CentOS 7 安装并配置 MySQL 5.6

    Linux使用MySQL Yum存储库上安装MySQL 5.6,适用于Oracle Linux,Red Hat Enterprise Linux和CentOS系统. 1.添加MySQL Yum存储库 ...

  6. C#中获取用户登录IP地址

    using System.Net; //导入命名空间 public string getLocalIP() { string strHostName = Dns.GetHostName(); //得到 ...

  7. 获取form表单元素值的4种方式

    <html><head><title></title><script type="text/javascript"> f ...

  8. log Log4NET配置

    Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过 日志查看系统的运行过程,从而发现系统的问题.日志的作用:将 ...

  9. GSS1 - Can you answer these queries I(线段树)

    前言 线段树菜鸡报告,stO ZCDHJ Orz,GSS基本上都切完了. Solution 考虑一下用线段树维护一段区间左边连续的Max,右边的连续Max,中间的连续Max还有总和,发现这些东西可以相 ...

  10. Redis持久化————AOF与RDB模式

      1.        官方说明:  By default Redis asynchronously dumps the dataset on disk. This mode is good enou ...