生成指定范围内的随机数

这个是最常用的技术之一。程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例。问题往往类似于:

如何随机生成 1~100 之间的随机数,取值包含边界值 1 和 100。

或者是:

如何随机生成随机的3位整数?

等等……

以 Java 语言为例,我们观察其 Random 对象的 nextInt(int) 方法,发现这个方法将生成 0 ~

参数之间随机取值的整数。例如(假设先有 Random rand = new Random();,下同):

rand.nextInt(100);

这行代码将生成范围 0~100 之间的随机数,有趣的是,取值可能为 0 ,但不可能为

100。我们用中学数学课学习的区间表示法,表示为:[0, 100)。

那么如果要获得区间 [1~100] 的随机数,该怎么办呢?稍微动动脑筋就可以想到:区间 [0, 100) 内的整数,实际上就是区间

[0, 99]。因为最大边界为100,可惜不能等于100,因此最大可能产生的“整数”就是99。

既然 rand.nextInt(100) 获得的值是区间 [0, 99],那么在这个区间左右各加 1,就得到了区间 [1,

100]。因此,代码写成:

rand.nextInt(100) + 1;

即可。

运行下面的代码,将获得 [1, 100] 的 10 个取值。

import java.util.Random;

public class Test {

public static void main(String[] args){

Random rand = new Random();

for(int i=0; i<10; i++) {

System.out.println(rand.nextInt(100) + 1);

}

}

}

编译运行,输出结果为:

81

64

31

86

56

14

45

57

28

90

多次运行,结果每次都不同,但取值一定会在 1 和 100 之间,可能出现 1 和 100。

同理,很容易知道如果要获得随机两位整数,代码写成:

rand.nextInt(90) + 10;

你一定很惊讶,为什么是这么写出来的。其实,在 nextInt() 方法中作为参数的数字 90

表示:你希望生成的随机数的所有取值的可能性的数量(在本命题中,两位整数取值为 [10, 99],共90个数);加好后面的数字 10

,表示区间的最小取值。

你可以验证下,按照这样理解,[1, 100] 的随机数,是不是应该写成 rand.nextInt(100) + 1 。千万不要把参数

100 理解为最大取值。只是区间 [1, 100] 正好从 1 开始,所以最大取值和取值可能性数量正好同为 100。

因此,

生成随机三位数的代码为:

rand.nextInt(900) + 100;

生成区间 [64, 128] 中随机值的代码为:

rand.nextInt(65) + 64;

取值可能性的数量是如何计算出来的呢?当然是 最大取值-最小取值+1 ,所以,有最终公式如下:

// For Java

// randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数

int randNumber = rand.nextInt(MAX - MIN + 1) + MIN;

在微软平台下,由于 .Net Framework 提供了相应的方法来生成固定区间的整数,所以公式为:

// For C#

// randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数

int randNumber = rand.Next(MIN, MAX + 1);

转自: http://blog.sina.com.cn/s/blog_59aebaa10100ct47.html

java 闭区间随机数_Java中在特定区间产生随机数相关推荐

  1. java list对象_JAVA中list

    Java 查找 List 中的最大值.最小值 Java 查找 List 中的最大值.最小值 java> List list = new ArrayList(); java.util.List l ...

  2. java 随机数生成实现_Java中生成随机数的实现方法总结

    搜索热词 在实际开发工作中经常需要用到随机数.如有些系统中创建用户后会给用户一个随机的初始化密码.这个密码由于是随机的,为此往往只有用户自己知道.他们获取了这个随机密码之后,需要马上去系统中更改.这就 ...

  3. java 字符串总结_Java中字符串(String)总结

    先说说JDK API: JDK中包含大量的API类库,所谓API(Application Programming Interface,应用程序编程接口,这些功能以类的形式封装). JDK API包含的 ...

  4. java随机整数_java如何产生1-8的整数随机数?

    展开全部 (int)(Math.random()*8)+1 或者 Random r =new Random(100); System.out.println(r.nextInt(8)+1); Java ...

  5. java有道_java中的各种流(老师的有道云笔记)

    内存操作流-字节 之前的文件操作流是以文件的输入输出为主的,当输出的位置变成了内存,那么就称为内存操作流.此时得使用内存流完成内存的输入和输出操作. 如果程序运行过程中要产生一些临时文件,可采用虚拟文 ...

  6. java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信

    你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...

  7. java file 方法_JAVA中File的常用方法

    一.File类中包含了很多获得文件或文件夹属性的方法,使用起来比较方便,下面将常见的方法介绍如下: a.createNewFile方法 public boolean createNewFile() t ...

  8. java异常面试_java中异常的面试

    https://blog.csdn.net/qq_36523638/article/details/79363652 1) Java中的检查型异常和非检查型异常有什么区别? 这又是一个非常流行的Jav ...

  9. java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述

    阅读: 877 密钥库是用于存储加密密钥和证书的存储工具 ,最常用于SSL通信,以证明服务器和客户端的身份.密钥库可以是文件或硬件设备.有三种类型的条目可以存储在密钥库中,取决于密钥库的类型,这三种类 ...

最新文章

  1. 使用cmake组建跨平台项目
  2. jpa SessionFactory事物失效
  3. 扎心一问:分库分表就能无限扩容吗?
  4. C++this指针的用途
  5. 正确理解Python函数是第一类对象
  6. vscode 推荐premiter_自用VSCode优质插件推荐
  7. linux服务器开放防火墙和端口,以及查询状态
  8. 最近参加一个公司的入职培训
  9. java interceptor用法_java自定义拦截器用法实例
  10. java web空指针,java - Web服务中的Java空指针异常@autowired [重复] - 堆栈内存溢出
  11. CEPH RGW集群和bucket的zone group 不一致导致的404异常解决 及 使用radosgw-admin metadata 命令设置bucket metadata 的方法
  12. 4G内存为什么会少800M
  13. ukey网络连接异常_连接UKEY设备失败如何解?电子支付OCX – 手机爱问
  14. (Java笔记)CGLib动态代理
  15. python练习实例——特殊回文数
  16. 全国名医无私奉献特效秘方100条
  17. 年终报告:通过3个维度,回看2022全球电商市场的“多样性”
  18. 移动UI设计-表单设计
  19. broker指定ip
  20. html下拉框设置默认值_html下拉框怎么设置默认值

热门文章

  1. The 10 coolest papers from CVPR 2018
  2. 监控工具glances
  3. Java 世界的法外狂徒:反射
  4. linux中etc目录下没有source,Linux /etc/profile文件详解及修改后如何立即生效(使用source命令)...
  5. mysql 添加分区_创建,增加,删除mysql表分区
  6. 顺丰科技智慧物流校园技术挑战赛(无t4)
  7. linux中groupadd命令详解,linux groupadd命令权限群组详解
  8. 平面设计中的孟菲斯风格!广州协众信息
  9. 怎么给视频配音?教你四种简单好用的视频配音方法
  10. React-Native 踩坑日志之 zIndex无效问题的记录