JAVA中 如何产生一个特定范围的随机数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中 如何产生一个特定范围的随机数相关的知识,希望对你有一定的参考价值。

JAVA中 如何产生一个特定范围的随机数 比如 我要产生一个0 1 2 这三个数中的一个数
再比如 我要产生一个 5到26的一个随机数 这些要怎么写 或者产生一个随机数后 怎样取余来达到这么目的

java.util
类 Random
java.lang.Object
java.util.Random
所有已实现的接口:
Serializable
直接已知子类:
SecureRandom

--------------------------------------------------------------------------------

public class Randomextends Objectimplements Serializable此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证属性的实现,为类 Random 指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。

Random 类所实现的算法使用一个 protected 实用工具方法,每次调用它都可提供最多 32 个伪随机生成的位。

很多应用程序会发现 Math 类中的 random 方法更易于使用。

从以下版本开始:
JDK1.0
另请参见:
Math.random(), 序列化表格

--------------------------------------------------------------------------------

构造方法摘要
Random()
创建一个新的随机数生成器。
Random(long seed)
使用单个 long 种子创建一个新随机数生成器: public Random(long seed) setSeed(seed); next 方法使用它来保存随机数生成器的状态。
方法摘要
protected int next(int bits)
生成下一个伪随机数。
boolean nextBoolean()
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 boolean 值。
void nextBytes(byte[] bytes)
生成随机字节并将其置于用户提供的字节数组中。
double nextDouble()
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0之间均匀分布的 double 值。
float nextFloat()
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0 之间均匀分布的 float 值。
double nextGaussian()
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。
int nextInt()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n)
返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
long nextLong()
返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 long 值。
void setSeed(long seed)
使用单个 long 种子设置此随机数生成器的种子。
楼下的,直接说不理解有什么用
参考技术A 随机数的生成方法是“new Random()”。
生成范围为(0-1)之间的小数,不包含两个端点。
如:生成5位随机整数“int radomInt = new Random().nextInt(99999)”即可。
参考技术B 生成0-2之间的随机数,包括2
Random rand = new Random();
int randNum = rand.nextInt(3);
生成5-26之间的随机数,包括26
int randNum = rand.nextInt(22)+5;本回答被提问者采纳
参考技术C

生成0-2之间的随机数,包括2

Random rand = new Random();

int randNum = rand.nextInt(3);

生成5-26之间的随机数,包括26

int randNum = rand.nextInt(22)+5;

java中让随机数产生在一个区间段:

假设你要产生5到10之间的随机数,可以用下面方法:

int Min = 5;

int Max = 10;

int result = Min + (int)(Math.random() * ((Max - Min) + 1));

参考技术D Math.random()产生一个0-1的随机数
你用一个1-10的数字去乘就行了。
比如你要0,1,2
(int)(Math.random()*3)
同理:乘以100内的数字就行
5-26
就大于(int)((Math.random()*6)
小于(int)(Math.random()*27)
或者(int)(Math.random()*22 +5)追问

int)(Math.random()*3 这样弄出的全是0

追答

你用 错了!(int)(Math.random()*3 ) 少了半个括号

Java获取特定区间随机数及产生不重复随机数

问题

有这样一种需求,在这样一个数组中String[] arr = new String[]{"电商", "互联网", "小程序", "网络推广", "文化", "教育", "造型设计", "服装设计"};,随机取n个选项且不重复,n随机且在1-m这个范围之内,其中m是个确定的数且m<=数组长度。

思路

取特定区间的一个随机数

// 从区间[1,4]随机取一个数
Random random = new Random();
int num = random.nextInt(4) + 1;

// 从区间[MIN,MAX]随机取一个数(MAX>MIN,MIN>=0)
Random random = new Random();
int num = random.nextInt(MAX - MIN + 1) + MIN;

// random.nextInt(num)取值范围是 [0,num)

想要从一个长度为M的数组中随机的取其中的N个元素,有两种思路

  1. 产生N个不重复的随机数[0,M-1],根据下标从数组中取值
  2. 将数组内元素顺序打乱,取前N个数,即对前N个数,每个都和元素进行交换,随机么?

思路1

int startArray[] = {0,1,2,3,4,5,6,7,8,9};//seed array    
int N = 10;//随机数个数    
int resultArray[] = new int [10];//结果存放在里面    
for(int i = 0; i < N; i++)    
{    
    int seed = random(0, startArray.length - i);//从剩下的随机数里生成    
    resultArray[i] = startArray[seed];//赋值给结果数组    
    startArray[seed] = startArray[startArray.length - i - 1];//把随机数产生过的位置替换为未被选中的值。    
} 

思路2

// 

解决

Random random = new Random();
int num = random.nextInt(4) + 1;
System.out.println("num:" + num);
String[] arr = new String[]{"电商", "互联网", "小程序", "网络推广", "文化", "教育", "造型设计", "服装设计"};
int len = arr.length;
for (int i = 0; i < num; ++i) {
    int idx = random.nextInt(len - i);
    System.out.println(arr[idx]);
    String tmp = arr[idx];
    arr[idx] = arr[len - i - 1];
    arr[len - i - 1] = tmp;
}

参考

产生N个不重复的随机数的快速算法

以上是关于JAVA中 如何产生一个特定范围的随机数的主要内容,如果未能解决你的问题,请参考以下文章

java中如何产生固定范围的随机数

java中如何产生固定范围的随机数

java中如何产生固定范围的随机数

Java如何得到随机数的第5个值

怎样用java产生一个指定范围的随机数?

怎样用java产生一个指定范围的随机数?