java 随机数产生 常用类及方法

1、Random类

Random():创建一个新的随机数生成器。

new一个Random类的对象:

Random r = new Random();

利用该对象产生一个随机整数:
常用nextInt,不过它有两个构造方法:

(1)int x = r.nextInt(); //这样产生的随机数类似于c++的rand(),使用的时候需要取模,而且!!!它会产生负数!

(2)int x = r.nextInt(100);  //这个会好用一些,产生的是0~99之间的整数

Random(long seed):使用单个 long 种子创建一个新的随机数生成器。

种子的作用请参考源代码:

/**
     * Creates a new random number generator using a single {@code long} seed.
     * The seed is the initial value of the internal state of the pseudorandom
     * number generator which is maintained by method {@link #next}.
     *
     * <p>The invocation {@code new Random(seed)} is equivalent to:
     *  <pre> {@code
     * Random rnd = new Random();
     * rnd.setSeed(seed);}</pre>
     *
     * @param seed the initial seed
     * @see   #setSeed(long)
     */
    public Random(long seed) {
        if (getClass() == Random.class)
            this.seed = new AtomicLong(initialScramble(seed));
        else {
            // subclass might have overriden setSeed
            this.seed = new AtomicLong();
            setSeed(seed);
        }
    }

    private static long initialScramble(long seed) {
        return (seed ^ multiplier) & mask;
    }

有一个重点:由于random产生的随机数是伪随机数,所以当种子不变时,产生的随机数序列其实是不变的,也即可预测

2、Math.random()

会产生[0.0~1.0)之间的浮点数,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布

如果要使用这个方法产生随机整数,参考下面这个例子:

int x = (int)(Math.random()*n);

产生[0,n)之间的整数

以下备注参考:https://www.cnblogs.com/ningvsban/p/3590722.html

备注:下面是Java.util.Random()方法摘要:

  1. protected int next(int bits):生成下一个伪随机数。
  2. boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
  3. void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。
  4. double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
  5. float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。
  6. double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
  7. int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
  8. int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
  9. long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
  10. void setSeed(long seed):使用单个 long 种子设置此随机数生成器的种子。

下面给几个例子:

  1. 生成[0,1.0)区间的小数:double d1 = r.nextDouble();
  2. 生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
  3. 生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;
  4. 生成-231到231-1之间的整数:int n = r.nextInt();
  5. 生成[0,10)区间的整数:

int n2 = r.nextInt(10);//方法一

n2 = Math.abs(r.nextInt() % 10);//方法二

原文地址:https://www.cnblogs.com/PineZhuo/p/10647786.html

时间: 2024-08-29 13:35:14

java 随机数产生 常用类及方法的相关文章

Java基础之常用类及方法(七)

String类: java.lang.String类代表不可变的字符序列. String类的常见构造方法: String(String original):创建一个String对象为original的拷贝. String(char[] value):用一个字符数组创建一个String对象. String(char[] value,int offset,int count):用一个字符数组从offset项开始的count个字符序列创建一个String对象. package MyString; pu

转:java中包、类、方法、属性、常量的命名规则

必须用英文,不要用汉语拼音 1:包(package):用于将完成不同功能的类分门别类,放在不同的目录(包)下,包的命名规则:将公司域名反转作为包名.比如www.sohu.com 对于包名:每个字母都需要小写.比如:com.sohu.test;该包下的Test类的全名是:com.sohu.Test.java . 如果定义类的时候没有使用package,那么java就认为我们所定义的类位于默认包里面(default package). 2:类:首字母大写,如果一个类由多个单词构成,那么每个单词的首字

Java之常用类及方法

下面我们介绍Java类库所提供的常用类及类的常用方法 一.java.lang.String 1. String类常用的构造函数 public String(String original) 使用串对象original,创建字符串对象,其中original可以是字符串常量或字符串对象 public String(char value[]) 使用字符数组value,创建一个字符串对象 public String(char value[],int offset,int count) 从字符数组valu

Java基础总结--常用类以及包的访问权限

-----Object---所有类的根类1.怎么得到的:通过对所有对象不断的向上抽取共性,具备所有对象的共性的东西2.常用的方法* equals(Object obj):比较两个对象的引用是否指向同一个对象,本质就是引用地址是否相同,相同就返回true;作用和"=="一致,其子类继承后,只判断地址没有意义,一般会对该方法进行重写,重写后比较的是对象的特有内容是否相同.也用到了多态,为了代码的扩展性.eg字符串equals比较的就是内容.注意一个细节:重写后存在多态,若要访问子类特有数据

JAVA异常处理、常用类、反射、集合

异常 异常:在Java中是指被一个方法抛出的对象. 分类:检查异常.运行时异常.错误 运行时异常(uncheckd):RuntimeException和其子类 检查异常(checkd/搜检异常):指Exception和其子类,且不是RuntimeException的子类:它必须经过处理才会找到 语法: try{ //被保护的代码 }catch(异常的名称 e1){ //捕获块 } 注意:应先捕获特殊再捕获一般异常:try没有出现异常catch将不会执行 异常处理的三种选择: 1)捕获这个异常,不

Java中各种(类、方法、属性)访问修饰符与修饰符的说明

类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所有类访问(使用),其他项目若想使用本项目中的类,必须将本项目打包为jar包,然后加入到classpath中 public类必须定义在和类名相同的同名文件中 (default) 只能被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称

java基础教程-常用类(四)

四.常用类 4.1字符串相关的类(String StringBuffer) 4.1.1String类   4.1.2StringBuffer类(代表可变的) 解释一下可变和不可变 String s1 = “hello”; String s2 = “world”; s1+=s2; 实际上又开辟了一块内存,将hello和world copy进去,s1指向新的内存 而StringBuffer只是在s1后面增加了一块内存,把world加上,不需要copy String与StringBuffer只有这一定

Java基础(43):Java中的Object类与其方法(转)

Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类是Java中唯一没有父类的类. 其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法. Object类中的方法 构造方法:public Object() 文档中的类概览: Java中的每个类都具有定义在Object类中的这些方法. protected Object cl

Java中关于日期类那些方法

转载请注明出处http://blog.csdn.net/harryweasley/article/details/41977633,谢谢 本篇文章主要介绍Date,DateFormat,SimpleDateFormat,Calendar这四个类 Date类: 在java.util包下 类 Date 表示特定的瞬间,精确到毫秒. 从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串.Date 中的相应方法已废弃.