(转)Java随机数

1 随机数的三种产生方式

本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。

广义上讲,Java中的随机数的有三种产生方式

(01). 通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。
(02). 通过Math.random()返回一个0到1之间的double值。
(03). 通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。

1.1 第1种


通过System.currentTimeMillis()来获取随机数。实际上是获取当前时间毫秒数,它是long类型。使用方法如下:

final long l = System.currentTimeMillis();

 

若要获取int类型的整数,只需要将上面的结果转行成int类型即可。比如,获取[0, 100)之间的int整数。方法如下:

final long l = System.currentTimeMillis();
final int i = (int)( l % 100 );

1.2 第2种


通过Math.random()来获取随机数。实际上,它返回的是0(包含)到1(不包含)之间的double值。使用方法如下:

final double d = Math.random();

若要获取int类型的整数,只需要将上面的结果转行成int类型即可。比如,获取[0, 100)之间的int整数。方法如下:

final double d = Math.random();
final int i = (int)(d*100);

1.3 第3种


通过Random类来获取随机数。

使用方法如下:
(01) 创建Random对象。有两种方法可以创建Random对象,如下:

Random random = new Random();//默认构造方法
Random random = new Random(1000);//指定种子数字

02) 通过Random对象获取随机数。Random支持的随机值类型包括:boolean, byte, int, long, float, double。
比如,获取[0, 100)之间的int整数。方法如下

int i2 = random.nextInt(100);

Random 的函数接口

// 构造函数(一): 创建一个新的随机数生成器。 
Random() 
// 构造函数(二): 使用单个 long 种子创建一个新随机数生成器: public Random(long seed) { setSeed(seed); } next 方法使用它来保存随机数生成器的状态。
Random(long seed) boolean nextBoolean()         // 返回下一个“boolean类型”伪随机数。 
void    nextBytes(byte[] buf) // 生成随机字节并将其置于字节数组buf中。 
double  nextDouble()          // 返回一个“[0.0, 1.0) 之间的double类型”的随机数。 
float   nextFloat()           // 返回一个“[0.0, 1.0) 之间的float类型”的随机数。 
int     nextInt()             // 返回下一个“int类型”随机数。 
int     nextInt(int n)        // 返回一个“[0, n) 之间的int类型”的随机数。 
long    nextLong()            // 返回下一个“long类型”随机数。 
synchronized double nextGaussian()   // 返回下一个“double类型”的随机数,它是呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。 
synchronized void setSeed(long seed) // 使用单个 long 种子设置此随机数生成器的种子。

1.4 获取随机数示例


下面通过示例演示上面3种获取随机数的使用方法。
源码如下(RandomTest.java):

import java.util.Random;
import java.lang.Math;/*** java 的随机数测试程序。共3种获取随机数的方法:*   (01)、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。*   (02)、通过Math.random()返回一个0到1之间的double值。*   (03)、通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。** @author skywang* @email kuiwu-wang@163.com*/
public class RandomTest{public static void main(String args[]){// 通过System的currentTimeMillis()返回随机数
        testSystemTimeMillis();// 通过Math的random()返回随机数
        testMathRandom();// 新建“种子为1000”的Random对象,并通过该种子去测试Random的APItestRandomAPIs(new Random(1000), " 1st Random(1000)");testRandomAPIs(new Random(1000), " 2nd Random(1000)");// 新建“默认种子”的Random对象,并通过该种子去测试Random的APItestRandomAPIs(new Random(), " 1st Random()");testRandomAPIs(new Random(), " 2nd Random()");}/*** 返回随机数-01:测试System的currentTimeMillis()*/private static void testSystemTimeMillis() {// 通过final long l = System.currentTimeMillis();// 通过l获取一个[0, 100)之间的整数final int i = (int)( l % 100 );System.out.printf("\n---- System.currentTimeMillis() ----\n l=%s i=%s\n", l, i);}/*** 返回随机数-02:测试Math的random()*/private static void testMathRandom() {// 通过Math的random()函数返回一个double类型随机数,范围[0.0, 1.0)final double d = Math.random();// 通过d获取一个[0, 100)之间的整数final int i = (int)(d*100);System.out.printf("\n---- Math.random() ----\n d=%s i=%s\n", d, i);}/*** 返回随机数-03:测试Random的API*/private static void testRandomAPIs(Random random, String title) {final int BUFFER_LEN = 5;// 获取随机的boolean值boolean b = random.nextBoolean();// 获取随机的数组buf[]byte[] buf = new byte[BUFFER_LEN];random.nextBytes(buf);// 获取随机的Double值,范围[0.0, 1.0)double d = random.nextDouble();// 获取随机的float值,范围[0.0, 1.0)float f = random.nextFloat();// 获取随机的int值int i1 = random.nextInt();// 获取随机的[0,100)之间的int值int i2 = random.nextInt(100);// 获取随机的高斯分布的double值double g = random.nextGaussian();// 获取随机的long值long l = random.nextLong();System.out.printf("\n---- %s ----\nb=%s, d=%s, f=%s, i1=%s, i2=%s, g=%s, l=%s, buf=[",title, b, d, f, i1, i2, g, l);for (byte bt:buf) System.out.printf("%s, ", bt);System.out.println("]");}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode105. 从前序与中序遍历序列构造二叉树(递归)

根据一棵树的前序遍历与中序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树:3/ \9 20/ \15 7代码 /*** Definition for a binary tree node.*…

途虎养车三个创始人_3个来自非常规创始人的获奖技术和产品见解

途虎养车三个创始人by Henry通过亨利 3个来自非常规创始人的获奖技术和产品见解 (3 Winning Technology & Product Insights from WeChat’s unconventional founder) Intro: The writer is a current PMLinkedIn. Formerly he worked as a growth engineer Facebook. he …

Powershell-创建Module

1.找到默认module路径,ISE启动时自动加载默认领下的Module代码。 $env:PSModulePath 2.在其中一个默认路径下创建个文件夹,在文件夹下创建一个.psm1后缀文件,注意文件夹名字与文件名一样。 3.在.psm1文件中写入函数代码。 4.重启ISE自动加载m…

android是java_为什么大家都用JAVA写android程序

您好,1、原始类型:v void 只能用于返回值类型Z booleanB byteS shortC charI intJ long(64位)F floatD double(64位)对象类型:Lpackage/name/ObjectName相当于java中的package.name.ObjectName解释如下:L:表示这是一个…

preserve log什么意思_一些有意思的JavaScript代码片段

Javascript是一门很灵活的语言,我们可以使用它动态地实现各种各样的功能。但是动态带来便利的同时,也存在一些令人费解的行为,稍不注意就会进入误区一个接着一个的坑。虽然我使用JavaScript的时间还不算长,也是遇到了一些有意思的…

快速排序——Java

快排的思想想必大家都懂,前后两个指针,向中间靠拢。我这个partition函数能保证所有相同的数都被比较一次,靠拢在一起。 代码: public class Main { public static int[] partition1(int[] arr, int begin, int end, int pivotVal…

预处理器sass_Sass — Web的预处理器装饰

预处理器sass美学的重要性,其影响以及实现这一目标的工具。 (Importance of aesthetics, its impact, and tool to achieve it.) I remember as a child, every time I’d walk up to a bakery, I’d choose the pastries with the most beautiful toppings. Only a…

leetcode971. 翻转二叉树以匹配先序遍历(dfs)

给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, …, N} 中的值。 通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点。 考虑从根节点开始的先序遍历报告的 N 值序列。将这一 N 值序列称为树的行程。 (回…

【BZOJ3932】[CQOI2015]任务查询系统 主席树

【BZOJ3932】[CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束&…

冲刺第一天

任务板 未开始 进行中已完成 刘晓杰:找回密码界面 页面风格优化 刘晓杰:滑动欢迎界面/加载界面 预计时间:5.5h 冯晨:找回密码功能 发布动态界面 冯晨&#xff…

杭电1003 java_杭电ACM1003题怎么理解?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼http://acm.hdu.edu.cn/showproblem.php?pid1003Max SumTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 99208 Accepted Submission(s): 22835Problem DescriptionGiven…

ubtunu打开firefox_如何在Firefox(在Lubuntu中)中打开“apt”链接?

问题描述Ask Ubuntu上的许多答案都直接指向在Ubuntu软件中心中在Xubuntu中打开的this之类的链接。在Lubuntu中,我收到此错误消息:在Firefox-Preferences中,应用程序看不到类似于apt的东西来关联程序等。在Chromium或Opera中打开相同的链接&am…

web api json_有关使用JSON Web令牌保护无服务器API的速成班

web api jsonWhat a mouthful of a title. Wouldn’t you agree? In this walkthrough you’ll learn about securing your Serverless endpoints with JSON web tokens.这么大的头衔。 你不同意吗? 在本演练中,您将学习如何使用JSON Web令牌保护无服务…

【python之路14】发送邮件实例

1、发邮件的代码 from email.mime.text import MIMETextfrom email.utils import formataddrimport smtplibmsg MIMEText(邮件内容,plain,utf-8)msg[from] formataddr([sunshuhai,25193qq.com])msg[to] formataddr([走人,252222222qq.com])msg[Subject] 主题server smtpli…

苹果内存取证工具volafox

2019独角兽企业重金招聘Python工程师标准>>> 苹果内存取证工具volafox volafox是一款针对苹果内存取证的专用工具。该工具使用Python语言编写。该工具内置了overlay data数据,用户可以直接分析苹果10.6-10.11的各种内存镜像文件。该工具提供28个子命令&a…

leetcode513. 找树左下角的值(dfs)

给定一个二叉树,在树的最后一行找到最左边的值。 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ class Solution {int maxL0,maxN0;pu…

Flutter实战视频-移动电商-45.详细页_说明区域UI编写

45.详细页_说明区域UI编写 pages/details_page/details_expain.dart 详情页面引用组件 效果展示: 最终代码: import package:flutter/material.dart; import package:flutter_screenutil/flutter_screenutil.dart;class DetailsExplain extends Stateles…

win10java怎么运行_win10系统电脑怎样才可以运行Java开发

展开全部安装jdk,jdk下载地址:网页链接 根据电脑系统选择对应版本。32/64安装时候,安装路径可以默认,也可以自己指定。我个人喜欢安装到非系统盘,比如D盘。jdk安装后,会弹出jre安装界面,路径同样…

HTTP服务器的本质:tinyhttpd源码分析及拓展

已经有一个月没有更新博客了,一方面是因为平时太忙了,另一方面是想积攒一些干货进行分享。最近主要是做了一些开源项目的源码分析工作,有c项目也有python项目,想提升一下内功,今天分享一下tinyhttpd源码分析的成果。ti…

monthdiff oracle_Oracle计算时间差函数

1、months_between(date1,date2) 返回两个日期之间的月份的差值(1)、如果两个日期月份内天数相同,或者都是某个月的最后一天,返回一个整数。否则,返回数值带小数select months_between(sysdate,addtime)as diff_month from test62、interval 时间间隔…