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. Go语言反射(reflect)及应用

    Go语言反射(reflect)及应用 基本原理及应用场景 在编译时不知道类型的情况下,可更新变量.在运行时查看值.调用方法以及直接对它们的布局进行操作,这种机制被称为反射. 具体的应用场景大概如下: ...

  2. Java线程池原理及分析

    线程池是很常用的并发框架,几乎所有需要异步和并发处理任务的程序都可用到线程池. 使用线程池的好处如下: 降低资源消耗:可重复利用已创建的线程池,降低创建和销毁带来的消耗: 提高响应速度:任务到达时,可 ...

  3. (2)ASP.NET Core3.1 Ocelot路由

    1.路由 前一个章节我们已经介绍过Ocelot,相信大家也了解到,Ocelot的主要功能是接收客户端等传入的HTTP请求,并将其转发到下游服务.Ocelot当前仅以另一个http请求的形式支持此功能( ...

  4. python开发基础(二)运算符以及数据类型之bool(布尔值))

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  5. MYSQL字段

    这里我的测试环境是wampserver 选择数据库 选择表 或者创建数据库和表 SHOW DATABASES; 查看数据库 CREATE DATABASE 数据库名; 创建数据库 在 MySQL 中, ...

  6. C++ 有用的资源

    C++ 有用的资源 以下资源包含了 C++ 有关的网站.书籍和文章.请使用它们来进一步学习 C++ 的知识. C++ 有用的网站 C++ Programming Language Tutorials ...

  7. 鸿蒙之后,小米 Vela 也来了,下一代物联网平台应该是什么?

    1. 华为鸿蒙基于jerryscript构建物联网应用框架 2020年9月10日 鸿蒙OS 1.0 正式版发布,面向物联网领域,鸿蒙推出了类web开发架构ACE JS = LiteOS + jerry ...

  8. IP 层收发报文简要剖析4--ip 报文发送

    无论是从本地输出的数据还是转发的数据报文,经过路由后都要输出到网络设备,而输出到网络设备的接口就是dst_output(output)函数 路由的时候,dst_output函数设置为ip_output ...

  9. shell编程之awk

    awk是一种用于处理数据和生成报告的编程语言 awk可以在命令行中进行一些简单的操作,也可以被写成脚本来处理较大的应用问题 awk与grep.sed结合使用,将使shell编程更加容易 awk工作模式 ...

  10. Electron 的断点续下载

    最近用 Electron 做了个壁纸程序,需要断点续下载,在这里记录一下. HTTP断点下载相关的报文 Accept-Ranges 告诉客户端服务器是否支持断点续传,服务器返回 Content-Ran ...