黑马程序员技术交流社区

标题: Random类是怎样获取随机数?或者说获取随机数的机制 [打印本页]

作者: 张权    时间: 2013-4-4 17:17
标题: Random类是怎样获取随机数?或者说获取随机数的机制
本帖最后由 张权 于 2013-4-4 18:42 编辑

  我想问的不是怎样用Random类获取一个随机数, 那样子我会, 就是直接调用方法就好, 我想问的是获取随机数的机制, 也就是说, java虚拟机在运行某段获取随机数的代码时,到底是怎样来获取随机数的?  只需要讲解一下大概思路就好, 因为要完全讲解清楚应该很难!!
作者: 李道福    时间: 2013-4-4 17:32
Random 类实现的算法使用一个 protected 实用工具方法,每次调用它最多可提供 32 个伪随机生成的位-----摘自JDK文档
作者: 张权    时间: 2013-4-4 17:39
李道福 发表于 2013-4-4 17:32
Random 类实现的算法使用一个 protected 实用工具方法,每次调用它最多可提供 32 个伪随机生成的位-----摘 ...

我是想要知道到底是怎么算的!!:L
作者: 郭沐昌    时间: 2013-4-4 19:31
本帖最后由 郭沐昌 于 2013-4-4 19:33 编辑

为生成数字,程序首先会创建一个 Random(随机)对象。由于自变量是在创建过程中传递的,所以 Java 将
当前时间作为一个“种子值”,由随机数生成器利用。通过Random 对象,程序可生成许多不同类型的随机数
字。做法很简单,只需调用不同的方法即可:nextInt(),nextLong(),nextFloat()或者nextDouble()。
  1. public class WhileTest {
  2.   public static void main(String[] args) {
  3.     double r = 0;
  4.     while(r < 0.99d) {
  5.       r = Math.random();
  6.       System.out.println(r);
  7.     }
  8.   }
复制代码
该方法的作用是产生 0 和1 之间(包括 0,但不包括1)的一个double值。while的条件表达式意思是说:“一直循环下去,直到数字等于或大于 0.99”。

作者: 王杰123    时间: 2013-4-4 21:40
你这个问题 回答不出来,网上百度了一下  http://mazego.blog.51cto.com/939199/621903
作者: 黄玉昆    时间: 2013-4-4 23:22
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者: 张权    时间: 2013-4-5 01:03
郭沐昌 发表于 2013-4-4 19:31
为生成数字,程序首先会创建一个 Random(随机)对象。由于自变量是在创建过程中传递的,所以 Java 将
当前 ...

能不能解释一下" java将当前时间作为一个"种子值" 是什么意思?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2