Random类

java.util.Random类用于产生随机数。需要导入包:

import java.util.Random;
方法 解释
Random() 创建一个Random类对象
Random(long seed) 使用seed作为随机种子创建一个Random类对象
int nextInt() 下一个整型值
int nextInt(int bound) 0~bound-1之间的随机整数
long nextLong() 下一个长整型值
float nextFloat() 0.0到1.0之间的下一个浮点值
double nextDouble() 0.0到1.0之间的下一个双精度值

r.nextInt():产生整数范围的随机数(均匀分布)

import java.util.Random;
public class TestRadomNextInt {
// int 值
public static void main(String[] args) {
Random r = new Random();
for (int i = 1; i <= 10; i++) {
int num = r.nextInt();
System.out.println(num);
}
}
}

56845052

-686301646

-1233789074

1636415628

1894696653

-595067037

-1041962125

392105380

-226429564

116890454


nextInt(int bound):随机生成[0,bound)之间的整数。注意是左开右闭区间,可能取到0,不能取到bound的值。

bound:边界

import java.util.Random;
public class TestRadomNextInt {
public static void main(String[] args) {
Random r = new Random();
for (int i = 1; i <= 10; i++) {
int num = r.nextInt(10);
System.out.println(num);
}
}
}

应用示例:生成10~20之间的随机数:

(1)范围:20-10=10,即随机数范围跨度为10,

r.nextInt(11)可以满足:[0——11)即[0——10]

(2)从10开始,则整体+10,即r.nextInt(11) + 10

import java.util.Random;
public class TestRandomRange {
public static void main(String[] args) {
Random r = new Random();
for (int i = 0; i < 100; i++) {
int n = r.nextInt(11) + 10;
System.out.println(n);
}
}
}

归纳:生成a~b之间的随机数,只需要使用 r.nextInt(b-a+1)+a即可。


种子:Random(long seed)

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class TestRadom {
public static void main(String[] args) {
无参随机数();
无参随机数();
带种子随机数();
带种子随机数();
}
static void 无参随机数() {
Random r = new Random();
for (int i = 0; i < 10; i++) {
System.out.print(r.nextInt(101) + "\t");// 0-100的随机整数
}
System.out.println();
}
static void 带种子随机数() {
Random r2 = new Random(100);
for (int i = 0; i < 10; i++) {
System.out.print(r2.nextInt(101) + " ");// 0-100的随机整数
}
System.out.println();
}
}

运行结果:

59	41	10	41	4	80	7	69	32	91
57 54 67 25 52 4 3 100 23 75
92 94 52 24 1 74 60 55 56 4
92 94 52 24 1 74 60 55 56 4

↑通过运行结果可以发现,种子相同的情况下,生成的随机数其实是一样的——组内看似随机,但多次运行结果相同。

事实上,Random的无参构造方法中,使用了时间作为种子,源码如下:

    public Random() {
this(seedUniquifier() ^ System.nanoTime());
}

Java 7中,对Random类进行了升级,提供了ThreadLocalRandom类,在并发访问环境下,可以减少多线程的资源竞争,提升线程的安全性。

Random r = new Random();

ThreadLocalRandom r = ThreadLocalRandom.current();

Java基础教程——Random随机数类的更多相关文章

  1. Java基础教程(19)--Object类

      Object类位于类结构树的最顶端,所有的类都是它的直接或间接子类,因此所有的类都继承了Object类的方法,我们可以在需要的时候覆盖这些方法.下面是一些将会在本文中讨论的Object类的方法: ...

  2. Java基础教程(14)--嵌套类

      Java允许在一个类中定义另外一个类,这样的类被称为嵌套类,就像下面这样: class OuterClass { ... class NestedClass { ... } }   嵌套类分为两种 ...

  3. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  4. Java基础教程:泛型基础

    Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...

  5. 常用类--Date日期类,SimpleDateFormat日期格式类,Calendar日历类,Math数学工具类,Random随机数类

    Date日期类 Date表示特定的时间,精确到毫秒; 构造方法: public Data() public Date(long date) 常用方法: public long getTime() pu ...

  6. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  7. Java基础教程:注解

    Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...

  8. Java基础教程:网络编程

    Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...

  9. Java基础教程(5)--变量

    一.变量 1.变量的定义   正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...

随机推荐

  1. git下载线上分支到本地分支

    首先执行 'git branch -r' 查看线上的所有分支 例如像要拷贝线上分支 'origin/online' 到本地本地分支 'online',则执行 'git checkout -b onli ...

  2. requests 库和beautifulsoup库

    python 爬虫和解析 库的安装:pip install requests; pip install beautifulsoup4 requests 的几个常用方法: requests.reques ...

  3. Verification of WISHBONE I2C Master Core(IRUN+Simvision)

    一.前言 很久没写技术博客了,有些懈怠,生活还得继续折腾.转眼工作一年多,时间越长越发觉得自己知之甚少,当然这跟IC行业技术密集有关.用空余时间在opencores网站上下载些小的IP看看 验证下,让 ...

  4. 跟我一起学Redis之Redis配置文件啃了一遍之后,从尴尬变得有底气了

    前言 秋高气爽的一天,那时候年轻帅气的我正在参照着搜索引擎写代码,迷之微笑般的敲着键盘(又从搜索引擎上找到代码案例啦),突然领导在小隔间里传来了呼唤声,然后有了以下场景: 领导:小Z,你过来一下: 当 ...

  5. Kubernetes 1.13 的完整部署手册

    前言: 非常详细的K8s的完整部署手册,由于Kubernetes版本和操作系统的版本关系非常敏感,部署前请查阅版本关系对应表 地址:https://github.com/kubernetes/kube ...

  6. P3065 [USACO12DEC]First! G

    题意描述 [USACO12DEC]First! G 不错的一道题. 给你 \(N\) 个字符串,要求你求出可能的字典序最小的字符串. 对于 可能的最小的字符串,你可以任意排列 \(26\) 个字母,使 ...

  7. CSP-S 2020全国开放赛前冲刺模拟训练题1 T4 二维码

    组合 首先可以考虑一个状态合法的条件,可以发现的是最后得到的矩阵一定是至少有一行或是有一列全$0$或$1$,如果把这一列或这一行删掉那么将剩下的子矩阵拼接起来又是一个子问题,同样的也是至少有一列或一行 ...

  8. mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. 7、Django之模型层第二篇:多表操作

    一 表关系回顾 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息表,该表有四个字段:工号.姓名.部门名.部门职 ...

  10. ES2020 系列:可选链 "?." 为啥出现,我们能用它来干啥?

    可选链 "?." 可选链 ?. 是一种访问嵌套对象属性的安全的方式.即使中间的属性不存在,也不会出现错误. "不存在的属性"的问题 如果你才刚开始读此教程并学习 ...