Java基础教程——Random随机数类
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随机数类的更多相关文章
- Java基础教程(19)--Object类
Object类位于类结构树的最顶端,所有的类都是它的直接或间接子类,因此所有的类都继承了Object类的方法,我们可以在需要的时候覆盖这些方法.下面是一些将会在本文中讨论的Object类的方法: ...
- Java基础教程(14)--嵌套类
Java允许在一个类中定义另外一个类,这样的类被称为嵌套类,就像下面这样: class OuterClass { ... class NestedClass { ... } } 嵌套类分为两种 ...
- Java基础教程(12)--深入理解类
一.方法的返回值 当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...
- Java基础教程:泛型基础
Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...
- 常用类--Date日期类,SimpleDateFormat日期格式类,Calendar日历类,Math数学工具类,Random随机数类
Date日期类 Date表示特定的时间,精确到毫秒; 构造方法: public Data() public Date(long date) 常用方法: public long getTime() pu ...
- Java基础教程(18)--继承
一.继承的概念 继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...
- Java基础教程:注解
Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
- Java基础教程(5)--变量
一.变量 1.变量的定义 正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...
随机推荐
- python 作业 批量读取excel文件并合并为一张excel
1 #!/usr/bin/env python 2 # coding: utf-8 3 4 def concat_file(a,b): 5 #如何批量读取并快速合并文件夹中的excel文件 6 imp ...
- Redis常用命令(2)——String
APPEND 格式:APPEND key value 作用:在key的键值后追加value,如果key不存在,则创建key,并存入value. 返回值:追加value后的字符串长度. 示例: 192. ...
- drf JWT认证模块与自定制
JWT模块 在djangorestframework中,有一款扩展模块可用于做JWT认证,使用如下命令进行安装: pip install djangorestframework-jwt 现在,就让我们 ...
- 3、Django之路由层
一 路由的作用 路由即请求地址与视图函数的映射关系,如果把网站比喻为一本书,那路由就好比是这本书的目录,在Django中路由默认配置在urls.py中. 二 简单的路由配置 # urls.py fro ...
- 管理机--Jumpserver由docker搭建
一.环境准备 使用Centos7.0及以上版本,(网要好哦) 二.安装docker 1,下载,安装,启动 docker yum -y install docker #安装docker ...
- 面试题:能谈谈Date、Datetime、Time、Timestamp、year的区别吗?
一. 推荐阅读 首发地址:https://mp.weixin.qq.com/s/9zKX86P4kzlKla6-NyS3EA 使用推荐阅读,有更好的阅读体验 二.准备 如果面试官问你:了解 date. ...
- 18FlaskRESTful
一,虚拟环境下安装(win) 在安装这个环节发现了很多问题,pycharm里装了之后发现根本引用不了,查明原因是因为第三方库pycharm无法识别. 解决办法:进入虚拟环境直接pip. 二,基本使用 ...
- 数论总结——更新ing
数论还是有很多没学完 只是小小的总结 一.同余定理 1.反身性:\(a\equiv a (mod m)\) 2.对称性:若\(a\equiv b(mod m)\),则\(b\equiv a (mod ...
- JavaScript 读取CSS3 transform
某些场景需要读取 css3 transform的属性 例如 transform:translate(10px,10px) rotate(-45deg); 这该怎么读取呢,正则表达式?毫无疑问这很坑爹 ...
- 分布式文档存储数据库之MongoDB备份与恢复
前文我们聊了下mongodb的访问控制以及用户创建和角色分配,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13974656.html:今天我们来了解下mong ...