#java.util.Random简介
来源:互联网 发布:win8.1改mac地址 编辑:程序博客网 时间:2024/05/18 16:40
原文地址:http://www.yanwushu.com/post/68.html
简介
- java.util.Random提供了产生各种类型随机数的方法。它可以产生均匀分布的int、long、float、double类型随机值以及Goussian(高斯,正态)分布的double类型随机值。
- java.lang.Math.Random(),生成[0.0,1.0)之间均匀分布的随机数,内部使用java.util.Random实现。
构造方法
- Random()//使用默认的种子构造发生器,即:System.currentTimeMillis()
- Random(long seed)//使用指定的种子构造发生器
seed(种子)的概念下文中会解释。
方法摘要
java.util.Random所有的公共方法如下列所示,方法功能已经注释。
// 设置seed值public void setSeed(long seed)//next系列方法public void nextBytes(byte[])public int nextInt() // 产生随机int数public int nextInt(int)//产生0到参数的随机int数public long nextLong() // 产生随机longpublic float nextFloat() // 产生随机floatpublic boolean nextBoolean();//产生随机booleanpublic double nextDouble() // 产生随机doublepublic double nextGoussian()// 返回呈高斯/正态分布的 double 值,其平均值是 0.0 标准差是 1.0。//ints、longs、doubles方法 sinces jdk 1.8public IntStream ints();public IntStream ints(long);public IntStream ints(int ,int);public IntStream ints(long,int ,int);public LongStream longs()public LongStream longs(long)public LongStream longs(long , long , long)public LongStream longs(long , long)public DoubleStraem doubles();public DoubleStraem doubles(long);public DoubleStraem doubles(long , double , double);public DoubleStraem doubles(double ,double);
seed(种子)
计算机产生的随机数都是伪随机数(包括本文中产生的随机数),以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
这意味着,如果2个Random对象使用相同的种子(比如都是100),并且以相同的顺序调用相同的函数,那它们返回值完全相同。比如下面代码中两个Random对象的输出完全相同
Random random1 = new Random(100);System.out.println(random1.nextInt());System.out.println(random1.nextFloat());System.out.println(random1.nextBoolean());Random random2 = new Random(100);System.out.println(random2.nextInt());System.out.println(random2.nextFloat());System.out.println(random2.nextBoolean());
生成[min,max]之间的随机整数
public static void main(String[] args) { int max=20; int min=10; Random random = new Random(); int s = random.nextInt(max)%(max-min+1) + min; System.out.println(s);}
random.nextInt(max)表示生成[0,max]之间的随机数,然后对(max-min+1)取模。
以生成[10,20]随机数为例,首先生成0-20的随机数,然后对(20-10+1)取模得到[0-10]之间的随机数,然后加上min=10,最后生成的是10-20的随机数
另外
当种子相同时,不同的random实例,同样顺序生成的随机数相同,那么是否会出现下面情况:
java.util.Random() a = new Random();java.util.Random() b = new Random();
是否有运算速度极快时a和b生成的结果相同的可能性?
一个经典面试题
阿里2015实习生笔试的一道附加题:
用java代码实现:从自然数1到1000中随机取900个不重复的数,并打印出来。
以下为参考答案
package gsm;import java.util.ArrayList;import java.util.List;import java.util.Random;public class Test2 { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 1000; i++) { list.add(i); } for (int j = 0; j < 900; j++) { getValue(list); } } //生成随机数 public static void getValue(List<Integer> list) { Random randomGenerator = new Random(); int a = randomGenerator.nextInt(list.size()); int value = list.get(a); System.out.println(value + ""); // 这个数已经出现过了,那么从list中删除 list.remove(a); }}
0 0
- #java.util.Random简介
- java.util.Random 分析
- java.util.Random学习
- java.util.Random学习
- Random类 (java.util)
- java.util.Random
- Random类 (java.util)
- java.util.Random
- Random类 (java.util)
- java.util.Random
- java.util.Random
- 【Java】java.util.Random()/Random(long seed)
- JAVA Random类 (java.util)
- Math.random()和java.util.Random对比
- Random类 (java.util) 【转】
- java.util.Random 实现原理
- 随机数 java.util.Random与java.lang.Math.Random()-Java
- Java 8里面的java.util.Random
- 【caffe-Windows】caffe+VS2013+Windows无GPU快速配置教程
- LVM磁盘管理
- Lightoj1015【基础题】
- 剑指offer面试题63:二叉搜索树的第k个节点 Java实现
- Android中IntentService详解
- #java.util.Random简介
- tri树模板
- flex访问java服务器的httpservice的沙箱处理
- 关于@SuppressWarnings
- struts2重定向时传递参数的实现!以及传递参数为中文时的乱码问题解决!
- 洛谷 P1032 [NOIP2002 T2] 字串变换
- Android从相册选择图片和调用系统摄像头拍照
- C++入门:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数
- 谈谈软件开发项目管理的积分制