Math.random()函数随机数取值机制
来源:互联网 发布:与淘宝打假师聊天方案 编辑:程序博客网 时间:2024/06/02 05:14
JDK 中有两个随机数类。
一个是 PRNG,也就伪随机数类 java.util.Random,是采用线性同余算法产生的。
另一个是 RNG,也就是 java.util.Random 的子类强随机数 java.security.SecureRandom,这是一个 SPI 类,也就是说具体的算法 由 Provider 提供。
Sun 给其提供了一个默认的算法——SHA1PRNG。由于 Random 是采用时间作为随机数种子,如果 hacker 知道随机数产生的时间,那就能重现随机数。而
SecureRandom 属于强随机数,一般不单独采用时间作为随机数种子,还会采用临时文件夹中大小,某个线程从休眠到被唤醒所耗的时间等等一系列无法重现的值作为随机数种
子。SecureRandom 一般用于安全、加密 API,以及 UUID 的生成。所谓的 SPI 类指的是 service provider interface,即服务提供商接口。是一种软件的扩展机制,在 Java 中表现为某些实现由 service
provider 实现,而使用者只需要使用不同的参数调用相同的 API 就能使用其他 provider 提供的服务。Java 中的 SPI 类,一般为这种形式:XxxxxSpi,表示 Xxxxx 是一个 SPI 类,也
就是说允许其他 provider 通过继承 XxxxxSpi 类来扩展 Xxxxx 的服务实现。而对于开发人员来说,不需要关心 XxxxxSpi 类,仅仅需要关心 Xxxxx 类就可以了。SPI 类充斥着 Java
中的各各方面,比如在 J2SE 中关于安全、加密的 API 全部都是 SPI 类,在 J2EE 中的 SPI 就更多了。加载 SPI 实现一般有两种方法:在 J2SE 中采取继承 SPI 类,使用特定
的 API 注册 SPI 实现,以达到类库索的目的。在 J2EE 中采用在 provider 在其 jar 包的 META-INF/services 中写上具体的 SPI 工厂,SPI 工厂需要实现 SPI 的某个工厂接口。比
如 JPA 的实现中需要在 provider 提供的实现 jar 包的 META-INF/services 含 有一个文件名 javax.persistence.spi.PersistenceProvider 的文件,文件内容为实现这个文件名所表
示接口口的实现。
public class CharTest {
public static void main(String[] args) {
//char c=(char)(int)(Math.random()*26+97-32); -----------
//System.out.println(c); ----- 1 \
Random ch = new Random();// ····· --->随机取得A~Z之间的任意一个字母!
int i = ch.nextInt(26);// ··· 2 /
char c = (char)(i+'A');// -----------
System.out.println(c);
int b = ch.nextInt(100)+10;
int c1 = (int) (Math.random()*11+10);
/*
int max;
int min;
Random sj = new Random();
int s = sj.nextInt(max)%(max-min+1) +min
//给定范围取随机数~
*/
@ 。 bao110908
找到好东西,果断收藏下~
虽然现在还在初学,关于线程深那么都不太理解,但是慢慢深入学习应该会知道的~
JDK 中有两个随机数类。
一个是 PRNG,也就伪随机数类 java.util.Random,是采用线性同余算法产生的。
另一个是 RNG,也就是 java.util.Random 的子类强随机数 java.security.SecureRandom,这是一个 SPI 类,也就是说具体的算法 由 Provider 提供。
Sun 给其提供了一个默认的算法——SHA1PRNG。由于 Random 是采用时间作为随机数种子,如果 hacker 知道随机数产生的时间,那就能重现随机数。而
SecureRandom 属于强随机数,一般不单独采用时间作为随机数种子,还会采用临时文件夹中大小,某个线程从休眠到被唤醒所耗的时间等等一系列无法重现的值作为随机数种
子。SecureRandom 一般用于安全、加密 API,以及 UUID 的生成。所谓的 SPI 类指的是 service provider interface,即服务提供商接口。是一种软件的扩展机制,在 Java 中表现为某些实现由 service
provider 实现,而使用者只需要使用不同的参数调用相同的 API 就能使用其他 provider 提供的服务。Java 中的 SPI 类,一般为这种形式:XxxxxSpi,表示 Xxxxx 是一个 SPI 类,也
就是说允许其他 provider 通过继承 XxxxxSpi 类来扩展 Xxxxx 的服务实现。而对于开发人员来说,不需要关心 XxxxxSpi 类,仅仅需要关心 Xxxxx 类就可以了。SPI 类充斥着 Java
中的各各方面,比如在 J2SE 中关于安全、加密的 API 全部都是 SPI 类,在 J2EE 中的 SPI 就更多了。加载 SPI 实现一般有两种方法:在 J2SE 中采取继承 SPI 类,使用特定
的 API 注册 SPI 实现,以达到类库索的目的。在 J2EE 中采用在 provider 在其 jar 包的 META-INF/services 中写上具体的 SPI 工厂,SPI 工厂需要实现 SPI 的某个工厂接口。比
如 JPA 的实现中需要在 provider 提供的实现 jar 包的 META-INF/services 含 有一个文件名 javax.persistence.spi.PersistenceProvider 的文件,文件内容为实现这个文件名所表
示接口口的实现。
public class CharTest {
public static void main(String[] args) {
//char c=(char)(int)(Math.random()*26+97-32); -----------
//System.out.println(c); ----- 1 \
Random ch = new Random();// ····· --->随机取得A~Z之间的任意一个字母!
int i = ch.nextInt(26);// ··· 2 /
char c = (char)(i+'A');// -----------
System.out.println(c);
int b = ch.nextInt(100)+10;
int c1 = (int) (Math.random()*11+10);
/*
int max;
int min;
Random sj = new Random();
int s = sj.nextInt(max)%(max-min+1) +min
//给定范围取随机数~
*/
0 0
- Math.random()函数随机数取值机制
- Math.random()取一个区间的随机数
- Math.random和Math.floor取随机数总结
- 理解Math.random()随机数
- 随机数生成Math.random()
- java-随机数Math.random()
- 随机数Math.random()
- Math.random() 随机数
- 【Math】Random获取随机数
- math.random的取值范围
- JavaScript中Math.random()方法生成随机数的通用函数
- JS获取随机数 Math.random()
- javaMath类随机数math.random()
- 使用Math.random生成随机数
- 12.java 中的随机数 Random类和 Math 中 random()函数
- JavaScript Math.random() 函数
- math.random()函数
- math.random()函数用法
- ubuntu登录自动运行脚本(解决root权限问题)
- JAVA学习笔记 -- 线程
- 【Android核心基础07】 - 广播接收者和通知
- 用汇编的眼光看C++(之特殊函数)
- Linux下使用Autotools生成Makefile
- Math.random()函数随机数取值机制
- jquey easyui 右键显示树形结构并且添加
- oracle下一条SQL语句的优化过程(比较详细)
- hdu2680 hdu2544 dijkstra
- 单播、广播、多播和IGMP
- Android Studio 快捷键整理分享
- Java23种设计模式
- 使用kindeditor时,取不到textarea里面的值
- unity与android交互