Java中如何生成随机数

发表于: java/j2ee | 作者: darkmi | 日期: 2013/05/03 08:00
标签: Random, 随机数
字号:

在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

[整理自网络]

切换主题切换主题
返回顶部