java获取随机数方法_java随机数 Java获取随机数的3种方法(4)

2>指定范围内的随机数

随机数控制在某个范围内,使用模数运算符%

获得的随机数有正有负的,用Math.abs使获取数据范围为非负数

3>获取指定范围内的不重复随机数

Java中的随机数是否可以重复?Java中产生的随机数能否可以用来产生主键?带着这个问题,我们做了一系列测试。

1.测试一: 使用不带参数的Random()构造函数

程序运行结果:

-1761145445

-1070533012

216216989

-910884656

-1408725314

-1091802870

1681403823

-1099867456

347034376

-1277853157

再次运行该程序:

-169416241

220377062

-1140589550

-1364404766

-1088116756

2134626361

-546049728

1132916742

-1522319721

1787867608

从上面的测试我们可以看出,使用不带参数的Random()构造函数产生的随机数不会重复。那么,什么情况下Java会产生重复的随机数呢?且看下面的测试。

2. 测试二:为Random设置数

无论程序运行多少次,其结果总是:

-1157793070

1913984760

1107254586

java获取随机数方法_java随机数 Java获取随机数的3种方法(4)_第1张图片

1773446580

254270492

-1408064384

1048475594

1581279777

-778209333

1532292428

甚至在不同的机器上测试,测试结果也不会改变!

3.原因分析:

(1) 首先请打开Java Doc,我们会看到Random类的说明:

此类的实例用于生成伪随机数流,此类使用 48 位的,该可以使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。

如果用相同的创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证实现这种特性,我们为类Random指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。

Java Doc对Random类已经解释得非常明白,我们的测试也验证了这一点。

(2) 如果没有提供数,Random实例的数将是当前时间的毫秒数,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码,我们可以非常明确地看到这一点。

4. 结论:

通过上面的测试和分析,我们会对Random类有较为深刻的理解。同时,我觉得,通过阅读Java Doc的API文档,可以很好地提高我们的Java编程能力,做到“知其然”;一旦遇到费解的问题,不妨打开Java的源代码,这样我们就能做到“知其所以然”。

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

一、Math.random()

随即生成0

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

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

最终代码:(int)(Math.random()*50) + 50

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-70093-4.html

你可能感兴趣的:(java获取随机数方法)