Java中如何生成随机数

发表于: java/j2ee | 作者: | 日期: 2013/5/03 10:05

在Java中我们可以使用java.util.Random类来产生一个随机数发生器。它有两种形式的构造函数,分别是Random()Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。
随机数发生器(Random)对象产生以后,通过调用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。
1、生成随机数
Random random = new Random();
Random random = new Random(100);//指定种子数100
random调用不同的方法,获得随机数。
如果2个Random对象使用相同的种子(比如都是100),并且以相同的顺序调用相同的函数,那它们返回值完全相同。如下面代码中两个Random对象的输出完全相同:

import java.util.Random;
public class RandomOne {
public static void main(String[] args) {
Random random1 = new Random(100);
System.out.println(random1.nextInt());
System.out.println(random1.nextFloat());
System.out.println(random1.nextBoolean());
Random random2 = new Random(100);
System.out.println(random2.nextInt());
System.out.println(random2.nextFloat());
System.out.println(random2.nextBoolean());
}
}

输出结果如下:

-1193959466
0.7346627
false
-1193959466
0.7346627
false

2、指定范围内的随机数
随机数控制在某个范围内,使用模数运算符%

import java.util.Random;
public class RandowTwo {
public static void main(String[] args) {
Random random = new Random();
for (int i = 0; i < 5; i++) { System.out.println(Math.abs(random.nextInt()) % 10); } } }

输出结果如下:

5
5
6
4
8

备注:
1、如果想要生成100范围内的随机数,则用100来取模即可;
2、获得的随机数有正有负的,用Math.abs使获取数据范围为非负数
3、获取指定范围内的不重复随机数

import java.util.Random;
public class RandomThree {
public static void main(String[] args) {
int[] intRet = new int[6];
int intRd = 0; //存放随机数
int count = 0; //记录生成的随机数个数
int flag = 0; //是否已经生成过标志
while (count < 6) { Random rdm = new Random(System.currentTimeMillis()); intRd = Math.abs(rdm.nextInt()) % 32 + 1; for (int i = 0; i < count; i++) { if (intRet[i] == intRd) { flag = 1; break; } else { flag = 0; } } if (flag == 0) { intRet[count] = intRd; count++; } } for (int t = 0; t < 6; t++) { System.out.println(t + "->” + intRet[t]);
}
}
}

输出结果如下:

0->9
1->17
2->6
3->1
4->22
5->4

[整理自网络]

: https://blog.darkmi.com/2013/05/03/328.html

本文相关评论 - 1条评论都没有呢
Post a comment now » 本文目前不可评论

No comments yet.

Sorry, the comment form is closed at this time.