`
zhanglu0223
  • 浏览: 23672 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

浅析Java中产生随机数的方式

 
阅读更多

java中,我们可以通过两种方式来获取随机数(generatingarandomnumber)一种是大家熟悉的java.lang.Math.Random()静态方法,另一种是创建java.util.Random对象。下面是两种方法的使用过程:

1.java.lang.Math.random()

在使用这一静态方法的时候,我们不需要import任何包,因为java.lang.*包是默认载入的,下面举例说明:

package com.luiszhang.test;

public class RandomTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//random()会自动产生一个0.0-1.0的双精度随机数
		double doubleRadomNum = Math.random();
		System.out.println(doubleRadomNum);
		//产生0-1000的双精度随机数
		doubleRadomNum = Math.random() * 1000;
		System.out.println(doubleRadomNum);
		
		//产生0-1000的整数随机数
		int intRandomNum = (int) (Math.random() * 1000);
		System.out.println(intRandomNum);
	}

}

2.创建java.util.Random对象

package com.luiszhang.test;

import java.util.Random;

public class RandomTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 创建random对象
		Random random = new Random();
		//获取一个整型随机数
		int intNumber = random.nextInt();
		//获取一个浮点随机数(0-1)
		float floatNumber = random.nextFloat();
		//获取双精度随机数(0-1)
		double doubleNumber = random.nextDouble();
		//获取boolean随机数
		boolean booleanNumber = random.nextBoolean();
		
		System.out.println("intNumber:" + intNumber);
		System.out.println("floatNumber:" + floatNumber);
		System.out.println("doubleNumber:" + doubleNumber);
		System.out.println("booleanNumber:" + booleanNumber);
	}

}

说明:

(1)我们可以通过System.currentTimeMillis()方法,这个方法返回一个从197011000秒到目前的一个毫秒数,返回类型是long,我们可以拿他作为一个随机数,我们可以拿他对一些数取模,就可以把他限制在一个范围之内啦。(在循环中易产生重复值,不好用)

(2)Randomrandom=newRandom();不指定基数,此种方式将会返回随机的数字,每次运行结果不一样。当然我们也可以指定基数,例如:Randomrandom=newRandom(100);同一基数所产生的随机数序列是一样的。

下面我们将写测试程序对这些进行验证:

package com.luiszhang.test;
import java.util.Random;

public class RandomTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 以100为基数创建两个随机数
		Random randomNumber1 = new Random(100);
		Random randomNumber2 = new Random(100);
		
		// 验证同一基数生成的Random对象产生的随机数是否相等
		for(int i = 0; i < 5; i++) {
			System.out.print(randomNumber1.nextInt() + " ");
			System.out.print(randomNumber2.nextInt() + "\n");
			System.out.println("Is equal is " + (randomNumber1.nextInt() == randomNumber2.nextInt()));
			System.out.println("------------------------------");
			
			System.out.print(randomNumber1.nextDouble() + " ");
			System.out.print(randomNumber2.nextDouble() + "\n");
			System.out.println("Is equal is " + (randomNumber1.nextDouble() == randomNumber2.nextDouble()));
			System.out.println("------------------------------");
			
			System.out.print(randomNumber1.nextFloat() + " ");
			System.out.print(randomNumber2.nextFloat() + "\n");
			System.out.println("Is equal is " + (randomNumber1.nextFloat() == randomNumber2.nextFloat()));
			System.out.println("------------------------------");
			
			System.out.print(randomNumber1.nextBoolean() + " ");
			System.out.print(randomNumber2.nextBoolean() + "\n");
			System.out.println("Is equal is " + (randomNumber1.nextBoolean() == randomNumber2.nextBoolean()));
			System.out.println("------------------------------");
		}
		
		
	// 以当前时间自己生成随机数,随机数范围为1-32
		for(int i = 0; i < 5; i++) {
			System.out.print((System.currentTimeMillis()%32 + 1) + "\n");
			System.out.println("------------------------------");
		}
	}
}


分享到:
评论

相关推荐

    浅析Java随机数与定时器

    在Java编程中,随机数和定时器是两个非常重要的概念,它们在各种应用场景中都有广泛的应用。本文将深入探讨Java如何生成随机数以及如何使用定时器来执行周期性任务。 首先,让我们来看看Java如何生成随机数。在Java...

    浅析用Java编程实现RSA算法的过程.pdf

    在使用Java语言实现RSA算法时,首先需要理解RSA算法的基本原理,包括模数的生成、密钥对的产生、加密和解密的过程等。在Java中实现RSA算法的关键步骤包括: 1. 导入Java的加密库,如java.security等。 2. 使用...

    浅析Java常用API(Scanner,Random)匿名对象

    Scanner类是Java中的一种输入方式,可以从键盘、文件、网络等多种来源获取输入。使用Scanner类需导入其所在包,import java.util.Scanner或import java.util.*(前者是导入util中的Scanner类,后者是导入util中的...

    深入浅析Random类在高并发下的缺陷及JUC对其的优化

    Random类在Java编程中扮演着重要的角色,它是我们生成随机数的常用工具。然而,当我们面对高并发环境时,Random类的一些内在缺陷就会显现出来。本文将深入探讨这些问题,并介绍Java并发包(JUC)如何通过优化来解决...

    android登陆验证码浅析代码

    在Android应用开发中,验证码(Verification Code)是保障用户安全的重要机制,主要用于防止恶意自动化的机器人或爬虫程序进行非法操作。...在这个过程中,理解和运用Android的图形API以及随机数生成技术是至关重要的。

    安全客第一期.pdf

    #### 浅析Java序列化和反序列化 Java序列化是将Java对象转换为字节流的过程,以便于存储或传输。然而,不正确的序列化和反序列化可能导致各种安全问题,例如远程代码执行。这部分内容深入剖析了Java序列化的工作...

Global site tag (gtag.js) - Google Analytics