Random入门使用

java中一般有两种随机数,一个是java.lang.Math中random()方法,一个是java.util的Random类。

一、Math.random()

随即生成0<=x<1的小数。返回带正号的 double 值

实例:如何写,生成随机生成出0~100中的其中一个数呢?

Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.
最终代码:(int)(Math.random()*50) + 50 

二、Random类

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。

Random r = new Random(100);

Random r3 = new Random(100);//两者r.nextInt(),r3.nextInt()返回一样

种子数只是随机算法的起源数字,和生成的随机数字的区间无关。

如果使用两个没带参数构造函数生成的Random对象,则不会出现这种情况,这是因为在没带参数构造函数生成的Random对象的种子缺省是当前系统时间的毫秒数。

直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类

nextInt()nextLong()产生的数范围不定的

nextFloat(),nextDouble()产生的数范围[0, 1)

// 使用java.lang.Mathrandom方法生成随机数 

System.out.println("Math.random(): " + Math.random()); 

// 使用不带参数的构造方法构造java.util.Random对象 

Random rd1 = new Random();

// 产生各种类型的随机数 

// 按均匀分布产生整数

System.out.println("int: " + rd1.nextInt()); 

// 按均匀分布产生长整数 

System.out.println("long: " + rd1.nextLong()); 

// 按均匀分布产生大于等于0,小于1float[0, 1) 

System.out.println("float: " + rd1.nextFloat()); 

// 按均匀分布产生[0, 1)范围的double

System.out.println("double: " + rd1.nextDouble()); 

// 按正态分布产生随机数

System.out.println("Gaussian: " + rd1.nextGaussian()); 

// 生成一系列随机数 System.out.print("随机整数序列:"); 

for (int i = 0; i < 5; i++) {

System.out.print(rd1.nextInt() + " "); 

System.out.println(); 

// 指定随机数产生的范围

System.out.print("[0,10)范围内随机整数序列: ");

for (int i = 0; i < 10; i++) { 

// RandomnextInt(int n)方法返回一个[0, n)范围内的随机数

System.out.print(rd1.nextInt(10) + " "); 

}

System.out.println(); 

System.out.print("[5,23)范围内随机整数序列: ");

for (int i = 0; i < 10; i++) { 

// 因为nextInt(int n)方法的范围是从0开始的, 

// 所以需要把区间[5,28)转换成5 + [0, 23)

System.out.print(5 + rd1.nextInt(23) + " "); 

System.out.println(); 

System.out.print("利用nextFloat()生成[0,99)范围内的随机整数序列: "); 

for (int i = 0; i < 10; i++) { 

System.out.print((int) (rd1.nextFloat() * 100) + " "); 

System.out.println(); 

System.out.println(); 

// 使用带参数的构造方法构造Random对象

// 构造函数的参数是long类型,是生成随机数的种子。 

System.out.println("使用带参数的构造方法构造的Random对象:");

Random ran2 = new Random(10); 

// 对于种子相同的Random对象,生成的随机数序列是一样的。

System.out.println("使用种子为10Random对象生成[0,10)内随机整数序列: ");

for (int i = 0; i < 10; i++) { 

System.out.print(ran2.nextInt(10) + " "); 

System.out.println(); 

Random ran3 = new Random(10); 

System.out.println("使用另一个种子为10Random对象生成[0,10)内随机整数序列: ");

for (int i = 0; i < 10; i++) { 

System.out.print(ran3.nextInt(10) + " ");

System.out.println();

posted @ 2013-10-21 10:52  tvxqpurpleline  阅读(113)  评论(0编辑  收藏  举报