JAVA常用类之——Math和Random
2015-07-20 10:57
555 查看
JAVA常用类之——Math和Random
关于Random,它提供了两个构造方法:
public Random() 该方法采用默认的种子,系统当前时间的ms数。
public Random(long seed) 该方法采用seed为种子。
Random实际是伪随机数,如果两个Random对像的种子相同,获取数值的方法和顺序相同,那就会得到相同的随机数。通常采用系统的当前时间作为种子:
Random r = new Random(System.currentTimeMillis);
Math类是一个数学运算的工具类,它有大量的方法不在一一叙述,但是它也有一个好玩的random方法,也是产生一个随机数,只不过这个随数限定为0.0 - 1.0 之间的double类型。
问题来了,请编写一个方法用于产生start和end之间的随机数,方法声明如下:
public int getRandom(int start, int end);
想一下,这个好像用Random也是完不成的,它大概只能产生[0 - nextInt(end))这个左开右闭的区间的值。
让我们的Math.random方法登场吧:
对于getRandom(start,end)方法,实际上就是一道小学数学题。Math.random产生0.0 - 1.0之间的数值,所以现在问题就是求X1 - X2之间的随机值,增量(X2-X1)*随机量即可。
Math.random(X2 - X1) + X1
玩过之后看JDK7新增的一个类: ThreadLocalRandom,这是一个线程安全的类,它也有一个功能是nextXXXX方法集可以指定产生随机数的区间:
关于Random,它提供了两个构造方法:
public Random() 该方法采用默认的种子,系统当前时间的ms数。
public Random(long seed) 该方法采用seed为种子。
Random实际是伪随机数,如果两个Random对像的种子相同,获取数值的方法和顺序相同,那就会得到相同的随机数。通常采用系统的当前时间作为种子:
Random r = new Random(System.currentTimeMillis);
Math类是一个数学运算的工具类,它有大量的方法不在一一叙述,但是它也有一个好玩的random方法,也是产生一个随机数,只不过这个随数限定为0.0 - 1.0 之间的double类型。
问题来了,请编写一个方法用于产生start和end之间的随机数,方法声明如下:
public int getRandom(int start, int end);
想一下,这个好像用Random也是完不成的,它大概只能产生[0 - nextInt(end))这个左开右闭的区间的值。
让我们的Math.random方法登场吧:
public static int getRandom(int start,int end){ return (int)(Math.random()*(end-start+1) + start); } public static void main(String[] args) { Scanner in = new Scanner(System.in); while(true){ //请输入年 System.out.println("请输入开始值:"); int start = in.nextInt(); System.out.println("请输入结束值:"); int end = in.nextInt(); //输出产生的随机数 for(int i=start; i<end; i++){ int res = getRandom(start,end); System.out.println(res); } } }
对于getRandom(start,end)方法,实际上就是一道小学数学题。Math.random产生0.0 - 1.0之间的数值,所以现在问题就是求X1 - X2之间的随机值,增量(X2-X1)*随机量即可。
Math.random(X2 - X1) + X1
玩过之后看JDK7新增的一个类: ThreadLocalRandom,这是一个线程安全的类,它也有一个功能是nextXXXX方法集可以指定产生随机数的区间:
ThreadLocalRandom rand = ThreadLocalRandom.current(); System.out.println(rand.nextInt(100, 200));首先,用该类的静态方法current()来获得ThreadLocalRandom对像,然后就可以随心所欲的产生随机数了。
相关文章推荐
- Java Web乱码分析及解决方案(一)——GET请求乱码
- Eclipse背景颜色修改
- JSBridge连接JAVA和JS的桥梁
- struts2 实战(二)
- java Calendar详解
- 【Java基础第一弹】Java序列化基础篇
- spring aop事务配置,事务回滚
- Spring bean加载顺序 depends-on
- 001--eclipse中的project 、 classpath和settings
- 无需使用任何jar包就可以使用Java发送邮件(复制)
- (转)eclipse 中创建maven web项目
- Java - Java Heap Space or Java Heap Memory
- Java基于线程实现带有滚动效果的Label标签实例
- spring aop的五种通知类型
- eclipse集成版工具下载地址
- 使用exe4j制作Java启动程序的的等候界面
- Build Antlr4 projects with eclipse java project template.
- Java 反射机制 举例
- JAVA中AES加密方法实例分析
- java:浅谈java环境变量