Java – Generate random integers in a rangejava获取某个范围内的一个随机数
In this article, we will show you three ways to generate random integers in a range.
java.util.Random.nextInt
Math.random
java.util.Random.ints (Java 8)
1. java.util.Random
This Random().nextInt(int bound) generates a random integer from 0 (inclusive) to bound (exclusive).
1.1 Code snippet. For getRandomNumberInRange(5, 10), this will generates a random integer between 5 (inclusive) and 10 (inclusive).
private static int getRandomNumberInRange(int min, int max) {
if (min >= max) {
throw new IllegalArgumentException("max must be greater than min");
}
Random r = new Random();
return r.nextInt((max - min) + 1) + min;
}
1.2 What is (max – min) + 1) + min?
Above formula will generates a random integer in a range between min (inclusive) and max (inclusive).
//Random().nextInt(int bound) = Random integer from 0 (inclusive) to bound (exclusive)
//1. nextInt(range) = nextInt(max - min)
new Random().nextInt(5); // [0...4] [min = 0, max = 4]
new Random().nextInt(6); // [0...5]
new Random().nextInt(7); // [0...6]
new Random().nextInt(8); // [0...7]
new Random().nextInt(9); // [0...8]
new Random().nextInt(10); // [0...9]
new Random().nextInt(11); // [0...10]
//2. To include the last value (max value) = (range + 1)
new Random().nextInt(5 + 1) // [0...5] [min = 0, max = 5]
new Random().nextInt(6 + 1) // [0...6]
new Random().nextInt(7 + 1) // [0...7]
new Random().nextInt(8 + 1) // [0...8]
new Random().nextInt(9 + 1) // [0...9]
new Random().nextInt(10 + 1) // [0...10]
new Random().nextInt(11 + 1) // [0...11]
//3. To define a start value (min value) in a range,
// For example, the range should start from 10 = (range + 1) + min
new Random().nextInt(5 + 1) + 10 // [0...5] + 10 = [10...15]
new Random().nextInt(6 + 1) + 10 // [0...6] + 10 = [10...16]
new Random().nextInt(7 + 1) + 10 // [0...7] + 10 = [10...17]
new Random().nextInt(8 + 1) + 10 // [0...8] + 10 = [10...18]
new Random().nextInt(9 + 1) + 10 // [0...9] + 10 = [10...19]
new Random().nextInt(10 + 1) + 10 // [0...10] + 10 = [10...20]
new Random().nextInt(11 + 1) + 10 // [0...11] + 10 = [10...21]
// Range = (max - min)
// So, the final formula is ((max - min) + 1) + min
//4. Test [10...30]
// min = 10 , max = 30, range = (max - min)
new Random().nextInt((max - min) + 1) + min
new Random().nextInt((30 - 10) + 1) + 10
new Random().nextInt((20) + 1) + 10
new Random().nextInt(21) + 10 //[0...20] + 10 = [10...30]
//5. Test [15...99]
// min = 15 , max = 99, range = (max - min)
new Random().nextInt((max - min) + 1) + min
new Random().nextInt((99 - 15) + 1) + 15
new Random().nextInt((84) + 1) + 15
new Random().nextInt(85) + 15 //[0...84] + 15 = [15...99]
//Done, understand?
1.3 Full examples to generate 10 random integers in a range between 5 (inclusive) and 10 (inclusive).
TestRandom.java
package com.mkyong.example.test;
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(getRandomNumberInRange(5, 10));
}
}
private static int getRandomNumberInRange(int min, int max) {
if (min >= max) {
throw new IllegalArgumentException("max must be greater than min");
}
Random r = new Random();
return r.nextInt((max - min) + 1) + min;
}
}
Output.
7
6
10
8
9
5
7
10
8
5
2. Math.random
This Math.random() gives a random double from 0.0 (inclusive) to 1.0 (exclusive).
2.1 Code snippet. Refer to 1.2, more or less it is the same formula.
(int)(Math.random() * ((max - min) + 1)) + min
2.2 Full examples to generate 10 random integers in a range between 16 (inclusive) and 20 (inclusive).
TestRandom.java
package com.mkyong.example.test;
public class TestRandom {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(getRandomNumberInRange(16, 20));
}
}
private static int getRandomNumberInRange(int min, int max) {
if (min >= max) {
throw new IllegalArgumentException("max must be greater than min");
}
return (int)(Math.random() * ((max - min) + 1)) + min;
}
}
Output.
17
16
20
19
20
20
20
17
20
16
Note
The Random.nextInt(n) is more efficient than Math.random() * n, read this Oracle forum post.
3. Java 8 Random.ints
In Java 8, new methods are added in java.util.Random
public IntStream ints(int randomNumberOrigin, int randomNumberBound)
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
This Random.ints(int origin, int bound) or Random.ints(int min, int max) generates a random integer from origin (inclusive) to bound (exclusive).
3.1 Code snippet.
private static int getRandomNumberInRange(int min, int max) {
Random r = new Random();
return r.ints(min, (max + 1)).findFirst().getAsInt();
}
3.2 Full examples to generate 10 random integers in a range between 33 (inclusive) and 38 (inclusive).
TestRandom.java
package com.mkyong.form.test;
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(getRandomNumberInRange(33, 38));
}
}
private static int getRandomNumberInRange(int min, int max) {
Random r = new Random();
return r.ints(min, (max + 1)).limit(1).findFirst().getAsInt();
}
}
Output.
34
35
37
33
38
37
34
35
36
37
3.3 Extra, for self-reference.
Generates random integers in a range between 33 (inclusive) and 38 (exclusive), with stream size of 10. And print out the items with forEach.
//Java 8 only
new Random().ints(10, 33, 38).forEach(System.out::println);
Output.
34
37
37
34
34
35
36
33
37
34
From:http://www.mkyong.com/java/java-generate-random-integers-in-a-range/
public static String getRandom(int min, int max){
Random random = new Random();
int s = random.nextInt(max) % (max - min + 1) + min;
return String.valueOf(s);
}
/*
原理:要得到的随机数的范围是[2,100],假设返回的伪随机数的范围是[0,N),也即[0,N-1];对得到的这个数模99,于是计算得到的数的范围是[0,98];再把结果加2,范围就是[2,100]了。
*/
https://www.cnblogs.com/yadongliang/p/6404821.html
Java – Generate random integers in a rangejava获取某个范围内的一个随机数的更多相关文章
- java获取某个范围内的一个随机数
一.取模操作 public static void main(String[] args){ for (int i = 1; i <= 20; i++){ int j = i % 11; Sys ...
- java java.uitl.Random产生随机数
通过使用java.uitl.Random产生一个1-10内的随机数.例: Random random = new Random(); int i = Math.abs(random.nextInt() ...
- java.util.Random 类的 nextInt(int num )
随机产生3个67~295的整数并找出数值居中的数 并输出中间的数例如:100,225和200,输出200 要随机产生某个范围内的整数,用 java.util.Random 类的 nextInt(int ...
- Java基础-Random类(05)
随机数(Random) 作用:用于产生一个随机数 使用步骤(和Scanner类似) 导包import java.util.Random; 创建对象Random r = new Random(); 获取 ...
- Java之Random类
什么是Random类 此类的实例用于生成伪随机数,使用此类中的方法能够得到一个随机数. Random使用步骤 查看类 java.util.Random :该类需要 import导入使后使用. 查看构造 ...
- Java 之 Random 类
一.Random 类 random 类的实例用于生成伪随机数. Demo: Random r = new Random(); int i = r.nextInt(); 二.Random 使用步骤 1 ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- Java学习-009-文件名称及路径获取实例及源代码
此文源码主要为应用 Java 获取文件名称及文件目录的源码及其测试源码.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-2-3 00:02:27,请知悉. Java获取文件名称的 ...
- Java API —— Random类
1.Random类概述 此类用于产生随机数 如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列. 2.构造 ...
随机推荐
- Linux中禁用THP(Transparent Huge Pages)
一.简介 Centos6开始引入THP,Centos7时默认启用,用来提升内存性能. 二.说明 争对一些数据库,如Oracle.MariaDB.MongoDB.VoltDB在使用时,要求关闭此功能. ...
- Log4j发送日志邮件功能
昨天配置了log4j发送错误日志的功能,很实用,记录一下! Log4j可以实现输出到控制台,文件,回滚文件,发送日志邮件,数据库,自定义标签.例如: log4j.rootLogger=DEBUG, I ...
- BIO、NIO和AIO的区别(简明版)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6543960.html 一:事件分离器 在IO读写时,把 IO请求 与 读写操作 分离调配进行,需要用到事件分离 ...
- Linux 防火墙命令的操作命令CentOS
service firewalld status; #查看防火墙状态 systemctl start firewalld.service;#开启防火墙 systemctl stop firewalld ...
- ArrayDeque源代码分析
1. 体系结构 了解特性,先看下体系结构: 如上所看到的,知道其支持 序列化,克隆,迭代器操作,队列特性.详细实现 除了实现以上接口外,扩展AbstractCollection 抽象类. 2. 应用场 ...
- 网站流量分析指标-PV/UV/PR/ip分析及区别
1.什么是pv? PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标. 高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你 ...
- java的BASE64Encoder,BASE64Decoder加密与解密
package com.app.common; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.Fi ...
- 转:Delta3D Editor编译成功
下载: 官网 www.delta3d.org 有些地方访问不了(试试这个代理:133.1.74.163 3128),我在公司就访问不了,但是住的地方就可以.但是sourceforge是可以访问 ...
- 今天才明白VC++.net的含义: VS系列的c++编译器可以支持托管C++(类似于C#,具体请看MS在线文档),当然包括winform界面开发。
因此我决定用winform做界面,用C++写逻辑.当然尽量不用托管代码写逻辑.
- Ubuntu12.04安装并配置Sublime Text 2
Ubuntu是个好系统,Sublime Text 是个好编辑器. 下载&安装 个人习惯喜欢到官网下载软件,http://www.sublimetext.com/2 选择合适的包下载回来的格式是 ...