Java中存在着两种Random函数:

一、java.lang.Math.Random;

  调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。例子如下:

package IO;
import java.util.Random;public class TestRandom {public static void main(String[] args) {// 案例1System.out.println("Math.random()=" + Math.random());// 结果是个double类型的值,区间为[0.0,1.0)int num = (int) (Math.random() * 3); // 注意不要写成(int)Math.random()*3,这个结果为0,因为先执行了强制转换System.out.println("num=" + num);/*** 输出结果为:* * Math.random()=0.02909671613289655* num=0* */}
}

二、java.util.Random

  下面Random()的两种构造方法:

     Random():创建一个新的随机数生成器。

     Random(long seed):使用单个 long 种子创建一个新的随机数生成器。

  我们可以在构造Random对象的时候指定种子(这里指定种子有何作用,请接着往下看),如:Random r1 = new Random(20);

  或者默认当前系统时间的毫秒数作为种子数:Random r1 = new Random();

  需要说明的是:你在创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。如下面的Java代码:

总结一下:Random的对象有两种构建方式:带种子和不带种子。不带种子的方式将会返回随机的数字,每次运行结果不一样。无论程序运行多少次,带种子方式构建的Random对象会返回一样的结果。

Random rand =new Random(25);
int i;
i=rand.nextInt(100);

  初始化时25并没有起直接作用(注意:不是没有起作用),rand.nextInt(100);中的100是随机数的上限,产生的随机数为0-100的整数,不包括100。

  具体用法如下例:

package IO;import java.util.ArrayList;
import java.util.Random;public class TestRandom {public static void main(String[] args) {// 案例2// 对于种子相同的Random对象,生成的随机数序列是一样的。Random ran1 = new Random(10);System.out.println("使用种子为10的Random对象生成[0,10)内随机整数序列: ");for (int i = 0; i < 10; i++) {System.out.print(ran1.nextInt(10) + " ");}System.out.println();Random ran2 = new Random(10);System.out.println("使用另一个种子为10的Random对象生成[0,10)内随机整数序列: ");for (int i = 0; i < 10; i++) {System.out.print(ran2.nextInt(10) + " ");}/*** 输出结果为:* * 使用种子为10的Random对象生成[0,10)内随机整数序列: * 3 0 3 0 6 6 7 8 1 4 * 使用另一个种子为10的Random对象生成[0,10)内随机整数序列: * 3 0 3 0 6 6 7 8 1 4 * */// 案例3// 在没带参数构造函数生成的Random对象的种子缺省是当前系统时间的毫秒数。Random r3 = new Random();System.out.println();System.out.println("使用种子缺省是当前系统时间的毫秒数的Random对象生成[0,10)内随机整数序列");for (int i = 0; i < 10; i++) {System.out.print(r3.nextInt(10)+" ");}/*** 输出结果为:* * 使用种子缺省是当前系统时间的毫秒数的Random对象生成[0,10)内随机整数序列* 1 1 0 4 4 2 3 8 8 4*  */// 另外,直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类ArrayList list=new TestRandom().getDiffNO(10);System.out.println();System.out.println("产生的n个不同的随机数:"+list);}/*** 生成n个不同的随机数,且随机数区间为[0,10)* @param n* @return*/public ArrayList getDiffNO(int n){// 生成 [0-n) 个不重复的随机数// list 用来保存这些随机数ArrayList list = new ArrayList();Random rand = new Random();boolean[] bool = new boolean[n];int num = 0;for (int i = 0; i < n; i++) {do {// 如果产生的数相同继续循环num = rand.nextInt(n);} while (bool[num]);bool[num] = true;list.add(num);}return list;}}

备注:下面是Java.util.Random()方法摘要:

  1. protected int next(int bits):生成下一个伪随机数。
  2. boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
  3. void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。
  4. double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
  5. float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。
  6. double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
  7. int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
  8. int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
  9. long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
  10. void setSeed(long seed):使用单个 long 种子设置此随机数生成器的种子。

下面给几个例子:

  1. 生成[0,1.0)区间的小数:double d1 = r.nextDouble();
  2. 生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
  3. 生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;
  4. 生成-231到231-1之间的整数:int n = r.nextInt();
  5. 生成[0,10)区间的整数:

    int n2 = r.nextInt(10);//方法一

    n2 = Math.abs(r.nextInt() % 10);//方法二

三.关于种子

伪随机(preundorandom):通过算法产生的随机数都是伪随机!!

只有通过真实的随机事件产生的随机数才是真随机!!比如,通过机器的硬件噪声产生随机数、通过大气噪声产生随机数

Random生成的随机数都是伪随机数!!!

参考博客:https://www.cnblogs.com/huiAlex/p/8057737.html

Java:Random函数及其种子的作用相关推荐

  1. java random函数原理_JAVA Random 详解

    Java中存在着两种Random函数: 一.java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范 ...

  2. java random函数用法_JAVA的Random类的用法详解

    Random类主要用来生成随机数,本文详解介绍了Random类的用法,希望能帮到大家. Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时 ...

  3. Java Random() 函数的使用方法

    import java.util.Random; public class Graphics {public static void main(String[] args) {Random r = n ...

  4. random函数 c语言,C/C++ 中rand()和random()函数(示例代码)

    nt rand(void); 返回一个随机数0 ~ pow(2, sizeof(int))-1 long int random(void); 返回一个随机数0 ~ pow(2, sizeof(long ...

  5. java random构造方法_Java中的Random()函数及两种构造方法

    Java中存在着两种Random函数: java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是 ...

  6. Java - 经常使用函数Random函数

    http://blog.csdn.net/pipisorry/article/details/44411541 Random()函数生成随机数 java.util.Random 在Java的API帮助 ...

  7. java——Random种子

    Random中可以设置种子也可以不设置种子,他们的区别还是很大的. 总结: 虽然二者都是伪随机,但是,无参数构造方法(不设置种子)具有更强的随机性,能够满足一般统计上的随机数要求. 使用有参的构造方法 ...

  8. python的random函数_关于random()的详细介绍

    这篇文章主要介绍了Python随机生成数模块random使用实例,本文直接给出示例代码,需要的朋友可以参考下代码如下:#!/usr/bin/env python#coding=utf-8import ...

  9. java——Random类和Math.Rondom

    转载:https://www.cnblogs.com/fjsnail/p/3474654.html Java中存在着两种Random函数: 一.java.lang.Math.Random; 调用这个M ...

最新文章

  1. 自定义DateField,带时分秒
  2. ABP官方文档翻译 3.1 实体
  3. 计算机5800怎么开机,神舟5800笔记本怎么进bios
  4. 缺省参数-指定函数缺省参数的默认值
  5. mysql显错注入,SQL注入:显错注入
  6. string的飞鸽传书字符串缓冲区
  7. 多传感器融合SLAM研究和学习专栏汇总
  8. CMatrix类 矩阵类 C++
  9. 数字鉴相器matlab,一种数字鉴相器的设计.pdf
  10. iOS小技能:提取数字(文本框对粘贴内容进行手机号码提取)
  11. 第二周:神经网络的编程基础(Basics of Neural Network programming)
  12. 机器学习数据分析极简思路及sklearn算法小试
  13. VSCode Remote SSH 过程试图写入的管道不存在
  14. 让我带你弄明白什么是RPC ,帮你整理一下你的小脑瓜!
  15. 【夜读】一个人最积极的生活状态
  16. 小白前端学习流程【爱创课堂专业前端培训】
  17. 怎么将某个页面,保存成一个长图?
  18. pyqt win32发送QQ消息
  19. 【数据库数据恢复】Sql Server数据库数据恢复案例
  20. python将json文件转换为csv文件

热门文章

  1. Java项目:酒店管理系统(java+SSM+Maven+LayUI+mysql)
  2. cordova插件 - 获取手机SIM卡信息(包括手机号)
  3. CobalStrike(CS)基础超级详细版
  4. 吐槽计算机科学学院,吐槽一下计算机学院学院网上的一条新闻
  5. jpg转换成pdf转换器使用教程
  6. 领英精灵如何收费的,怎样购买最划算?
  7. 1.7.4.1 Function Queries-函数查询
  8. FFmpeg+libmp3lame库源码Linux安装教程(centosarm7.6)
  9. 为macbook pro 2013late制作windows 10 u盘系统
  10. 华为deveco studio 2.0 附安装教程