Java多种方法产生随机数

概要:

生成随机数有两个方法。

1.使用java.util.Math类。

2.使用java.util.Random类。

| |目录

简介

使用java.util.Math类

它的random方法生成随机数,为0~1之间的浮点数。

使用java.util.Random类

它通过其构造方法创建随机数生成器,然后调用不同的方法获取多种类型随机数,而且随机数范围不限。它可以获取随机数的方法有:

nextBoolean()。返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的boolean值。

nextBytes(byte[]bytes)。生成随机字节并将其置于用户提供的字节数组中。所生成的随机字节数等于该字节数组的长度。

nextFloat()。返回下一个伪随机数,它是从此随机数生成器的序列中取出的在0.0和1.0之间均匀分布的float值。

nextInt()。它有两种形式——带参数和无参数。无参则表示返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的int值。nextInt(intn)中参数n表示所返回随机数的范围而且必须为正数,结果返回一个伪随机数,处于0<=x<=n之间均匀分布的int值。

nextLong()。返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的long值。

nextDouble()。返回下一个伪随机数,它是从此随机数生成器的序列中取出的在0.0~1.0之间均匀分布的double值。

setSeed(longseed)。使用单个long种子设置此随机数生成器的种子,其中参数seed表示初始种子。

示例

package net.xsoftlab.baike;
import java.util.Random;

/**
 * Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。
 * 它可以产生int、long、float、double以及Goussian等类型的随机数。
 * java.lang.Math中的方法random()只产生double型的随机数。
 */
public class Random_Number {
	public static void R_Math() {// 使用java.lang.Math的random方法生成随机数
		System.out.println("使用Math类中的random方法生成随机数的示例如下:");
		for (int i = 0; i < 5; i++) {
			int n = (int) (Math.random() * 50000);
			System.out.print((char) n + "	");// 将数字转换成字符输出
		}
		System.out.println("
");
	}
	public static void N_Param() {// 使用不带参数的构造方法构造java.util.Random对象
		System.out.println("使用Random类的构造方法生成随机数的示例如下:");
		Random rdm = new Random();
		// 产生各种类型的随机数
		System.out.println("int: " + rdm.nextInt());// 按均匀分布产生整数
		System.out.println("long: " + rdm.nextLong());// 按均匀分布产生长整数
		System.out.println("float: " + rdm.nextFloat());// 按均匀分布产生大于等于0,小于1的float
		System.out.println("double: " + rdm.nextDouble());// 按均匀分布产生[0,
															// 1)范围的double
		System.out.println("Gaussian: " + rdm.nextGaussian());// 按正态分布产生随机数
		// 生成一系列随机数
		System.out.print("随机整数序列:");
		for (int i = 0; i <= 5; i++) {
			System.out.print(rdm.nextInt() + "  ");
		}
		System.out.println("
");
	}
	public static void Range() {// 指定随机数产生的范围
		System.out.println("使用指定范围产生随机序列的示例如下:");
		System.out.print("[0,5)范围内随机整数序列: ");
		Random rdm = new Random();
		for (int i = 0; i < 10; i++) {
			// Random的nextInt(int n)方法返回一个[0, n)范围内的随机数
			System.out.print(rdm.nextInt(5) + "  ");
		}
		System.out.println();
		System.out.print("[3,24)范围内随机整数序列: ");
		for (int i = 0; i < 10; i++) {
			// 因为nextInt(int n)方法的范围是从0开始的,
			// 所以需要把区间[3,24)转换成3 + [0, 21)。
			System.out.print(3 + rdm.nextInt(21) + "  ");
		}
		System.out.println();
		System.out.print("利用nextFloat()生成[0,55)范围内的随机整数序列: ");
		for (int i = 0; i < 10; i++) {
			System.out.print((int) (rdm.nextFloat() * 50) + "  ");
		}
		System.out.println("
");
	}
	public static void H_Param() {// 使用带参数的构造方法构造Random对象
		// 构造函数的参数是long类型,是生成随机数的种子。
		System.out.println("使用带参数的构造方法构造的Random对象的示例如下:");
		Random rad = new Random(5);
		// 对于种子相同的Random对象,生成的随机数序列是一样的。
		System.out.println("使用种子为5的Random对象生成[0,5)内随机整数序列: ");
		for (int i = 0; i < 10; i++) {
			System.out.print(rad.nextInt(5) + "  ");
		}
		System.out.println();
		Random rad1 = new Random(5);
		System.out.println("使用另一个种子为5的Random对象生成[0,5)内随机整数序列: ");
		for (int i = 0; i < 10; i++) {
			System.out.print(rad1.nextInt(5) + "  ");
		}
		System.out.println("
");
	}
	public static void main(String[] args) {
		R_Math();
		Range();
		N_Param();
		H_Param();
	}
}


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消