random.netInt()如果括号里加上100,那就是生成0-100(不包括100)的随机数,那么,如果括号里不加参数,那么生成的是多少位数的随机数?是0-10吗?

AA:

从java的源代码里可以看到:

/*

* @return the next pseudorandom, uniformly distributed {@code int}

* value from this random number generator’s sequence

*/

public int nextInt() {

return next(32);

}

它调用了next(int)方法, 返回的是32位的随机序列值

==========================

Random函数在flash里是很有用的,能够生成基本的随机数,创建随机的移动,连同随机的颜色和其他更多的作用。在下面这个例子中当您每次按下按钮就会显示一个从-100到100的随机数,这个教程将解释如何做出这个例子连同如何利用Random函数产生其他不同的结果。

基本的Random函数如下

Math.random();

能够产生出0-1之间的任意小数

Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。它可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java.lang.Math中的方法Random()最大的不同之处,后者只产生double型的随机数。

类Random中的方法十分简单,它只有两个构造方法和六个普通方法。

构造方法:

(1)public Random()

(2)public Random(long seed)

Java产生随机数需要有一个基值seed,在第一种方法中基值缺省,则将系统时间作为seed。

普通方法:

(1)public synonronized void setSeed(long seed)

该方法是设定基值seed。

(2)public int nextInt()

该方法是产生一个整型随机数。

(3)public long nextLong()

该方法是产生一个long型随机数。

(4)public float nextFloat()

该方法是产生一个Float型随机数。

(5)public double nextDouble()

该方法是产生一个Double型随机数。

(6)public synchronized double nextGoussian()

该方法是产生一个double型的Goussian随机数。

以下是Random类的各种例子测试:

import java.util.Random;

public class RandomNumber {

public static void main(String[] args) {

// 使用java.lang.Math的random方法生成随机数 0-1

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

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

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

Random rd1 = new Random();

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

// 按均匀分布产生整数

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

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

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

// 按均匀分布产生大于等于0,小于1的float数[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++) {

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

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

}

System.out.println();

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

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("使用种子为10的Random对象生成[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("使用另一个种子为10的Random对象生成[0,10)内随机整数序列: ");

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

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

}

System.out.println();

}

}

执行结果:

Math.random(): 0.03900179772838652

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

int: -270073819

long: 7255466478054014832

float: 0.4808815

double: 0.6083990998389226

Gaussian: -0.9127617087700918

随机整数序列:-2019302565 -1633933993 -236750885 2020511907 619139053

[0,10)范围内随机整数序列: 3 6 7 1 9 8 4 0 4 8

[5,23)范围内随机整数序列: 8 14 27 14 23 23 23 15 24 11

利用nextFloat()生成[0,99)范围内的随机整数序列: 52 88 93 62 71 66 62 38 72  94

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

使用种子为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

ran2和ran3生成的随机数序列是一样的,

如果使用两个没带参数构造函数生成的Random对象, 则不会出现这种情况,这是因为在没带参数构造函数生成的Random对象的种子缺省是当前系统时间的毫秒数。另外,直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐