java⽣成三位随机数_java⼯具类(三)之⽣成若⼲位随机数java ⽣成若⼲位随机数的问题
在⼀次编程的过程中偶然碰到⼀个⼩问题,就是需要⽣成⼀个4位数的随机数,如果是⼀个不到4位⼤的数字,前⾯可以加0来显⽰。因为要求最后是⼀个4位的整数,不带⼩数点。当时就想到了⼏个办法:
⼀、 ⽤Math.random()
当时就这么想到,Math.random()⽅法不正好可以⽣成[0, 1)之间的数字么?如果⽤这个数字乘以10000不就是⼀个从[0, 1000)之间的数字了么? 于是当时就想到了这么⼀段代码:
for(int i = 0; i < 10; i++)
{
double number = Math.random();
System.out.println(number * 10000);
}
为了看看显⽰结果的情况,⽤了⼀个循环。
结果显⽰的运⾏结果如下:
372.4564939910557
3645.150576934125
6102.8559042871575
9953.00445315209
2063.1098637100063
6217.048150847877
5069.372886881975
8076.738641253838
1288.394893502075
14.324909511606032
很明显,在最初的设想中,有⼏个地⽅是没有考虑到的。
1. Math.random()⽣成的随机数不⼀定只有⼩数点后4位的。所以后⾯还是可能有多位,所以显⽰出来的结果有多个⼩树点。有⼈可能会想,如果我再把结果中的⼩数部分去掉呢?这并没有解决问题,其实也就是第⼆个问题。
2. 因为⽣成的数字可能⾜够⼩,哪怕乘了10000后还是个2位数字或者3位数字。这样的话,如果要凑成⼀个整4位的,还需要⼿⼯在前⾯补0.
那么,如果我们⽤这种很笨的办法来做的话,该怎么样呢?⾸先需要乘10000,然后将⼩数部分去掉,再判断⽣成的数字,1位的补3个0,2位的补2个0,3位的补1个0.
3. 还有⼀个问题就是,如果我们要将这个问题扩⼤到⽣成n位的随机数时,总不能后⾯去判断多少位,然后再去补0吧。⽽且,数字⾜够⼤的时候还可能会产⽣溢出的问题,int不够⽤了,估计还要⽤BigInteger。
看来,这个办法不是很好。实现起来也挺费劲。就为了实现这么点功能,还费这⽼⿐⼦劲,不值得。
⼆、逐位⽣成随机数
这个办法相对来说就会简单⼀点。我们如果利⽤⽣成整数的随机函数,然后⼀位⼀位的去⽣成的话。可能会简单⼀点。于是我们可以⽤⼀个这样的办法:
Random rnd = new Random();
public String getRandomNumber(int digCount) {
StringBuilder sb = new StringBuilder(digCount);
for(int i=0; i < digCount; i++)
sb.append((char)('0' + Int(10)));
String();
}
我们⽤到了java.util.Random这个类。nextInt(n)这个⽅法可以返回⼀个从0到n的随机数。
通过这个办法,我们可以⽣成⼀个若⼲位的随机数,然后⽤⼀个字符串的⽅式来表⽰。当数字⾜够长的时候,也不⽤担⼼会溢出。
补充:
前⾯的⽣成随机数⽅法还存在着⼀个⼩的缺陷。在随机数⽣成的⽅法中,我们需要每次重复调⽤的时候⽣成的数字都是不⼀样的。这样就需要每次随机化的时候提供⼀个随机化的种⼦(seed)。⽐较常⽤的⽅式就是采⽤当前的时间。所以说⼀个⽐较完整的利⽤当前时间作为种⼦,再将需要随机化的范围指定的步骤才算是⼀个完整的过程。具体的代码如下:
import java.util.Random;
import java.util.Date;
class RandomizeNumber
{
public static void testDate()
{
Date date = new Date();
long timeMill = Time();
System.out.println(timeMill);
Random rand = new Random(timeMill);
for(int i = 0; i < 20; i++)
{
System.out.Int(50));
jquery在项目里是干啥的}
}
public static void main(String[] args)
{
testDate();
}
}
如果我们每次运⾏这段代码,就会发现结果不⼀样,这样就可以保证⾜够随机化了。
Java⼯具类&lowbar;随机⽣成任意长度的字符串【密码、验证码】
import java.util.Random; public class PasswordCreate { /** * 获得密码 * @param len 密码长度 * @return */ pub ...
java⽣成多位随机数⽅法
Math.random()⽅法可以令系统随机选取⼤于等于0.0且⼩于1.0的伪随机double值 利⽤函数Math.random()即可⽣成若⼲位随机数 以下是⽣成⼗位随机数代码: public st ...
java⼯具类–⾃动将数据库表⽣成javabean
最近和数据库的表打交道挺多的,因为暂时做的是接⼝活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还⾏,如果不⼩⼼碰到⼏⼗个字段的他妈的写起来就有点⿇烦了,万⼀碰到⼏百个的呢,那不 ...
Java⼯具类——数学相关的类
Java⼯具类--数学相关的类 在上⼀篇⽂章中,我们系统学习了 Java ⾥⾯的包装类,那么这篇⽂章,我们就来学习⼀下Java提供好的类--数学相关的类. ⼀.数学类介绍 在最早期学习 Java 基础 ...
排名前 16 的 Java ⼯具类
在Java中,⼯具类定义了⼀组公共⽅法,这篇⽂章将介绍Java中使⽤最频繁及最通⽤的Java⼯具类.以下⼯具类.⽅法按使⽤流⾏度排名,参考数据来源于Github上随机选取的5万个开源项⽬源码. ⼀. ...
排名前16的Java⼯具类
⼲货:排名前16的Java⼯具类
在Java中,⼯具类定义了⼀组公共⽅法,这篇⽂章将介绍Java中使⽤最频繁及最通⽤的Java⼯具类.以下⼯具类.⽅法按使⽤流⾏度排名,参考数据来源于Github上随机选取的5万个开源项⽬源码. ⼀. ...
常⽤⾼效 Java ⼯具类总结
⼀.前⾔ 在Java中,⼯具类定义了⼀组公共⽅法,这篇⽂章将介绍Java中使⽤最频繁及最通⽤的Java⼯具类.以下⼯具类.⽅法按使⽤流⾏度排名,参考数据来源于Github上随机选取的5万个开源项⽬源码 ...
⼏种⾼效的Java⼯具类推荐
本⽂将介绍了⼗⼆种常⽤的.⾼效的Java⼯具类 在Java中,⼯具类定义了⼀组公共⽅法,这篇⽂章将介绍Java中使⽤最频繁及最通⽤的Java⼯具类. 在开发中,使⽤这些⼯具类,不仅可以提⾼编码效率,还 ...
随机推荐
R语⾔-实⽤数据对象处理函数
length(object) 显⽰对象中元素/成分的数量 dim(object) 显⽰某个对象的维度 str(object) 显⽰某个对象的结构 class(object) 显⽰某个对象的类或类型 m ...
hdu Sudoku Killer
简单的dfs,主要就是每个?处填的值是否满⾜条件的判断.这道题感觉考察的是输出格式的控制. #include"iostream"
#include"stdio.h&quo ...
jQuery ajax 返回的数据类型
请求数据的接⼝信息如下 当我们打印出返回的数据与数据节点时,我们发现数据节点显⽰为undefind 查看⼀下我们的代码 $.ajax({ type: "Post", url: &q ...
UITextField⾥⾯的 placeholder颜⾊和字体
//  placeholder 颜⾊ [field setValue:[UIColor redColor] forKeyPath:@"_Color& ...
C+&plus;函数传值调⽤
C++的函数的参数调⽤是传值⽅式. 想要改变传值调⽤,有引⽤和指针两种⽅式.其中,引⽤的实现机理也是通过⼀个指针,但是具体和指针传值的⽅式⼜不⼀样.具体见:C++中的指针与引⽤ 对于指针传值,其实实际 ...
hdu1115&lpar;重⼒算法的多边形中⼼)
H5拖拽 构造拖拽及缩放 pdf展⽰
前⾔: 协助项⽬需要实现⼀个签名的功能. 功能说明:1.有⽂本签名和头像签名.2.头像签名需要实现可拖拽功能.3.需要展⽰的是pdf的⽂件并需要获取签名位于pdf⽂件的相对位置. 功能⼀:实现拖拽 思 ...
20162302 实验三《敏捷开发与XP实践》实验报告
实 验 报 告 课程:程序设计与数据结构 姓名:杨京典 班级:1623 学号:20162302 实验名称:敏捷开发与XP实践 实验器材:装有IdeaU的联想拯救者80RQ 实验⽬的与要求:1.代码的格 ...
Dynamic 中修改实体中主字段的长度
select EntityId,* from MetadataSchema.Entity where Name='dji_incidentaddress' SELECT TOP 100 [Attrib ...
获取具有指定扩展数据的所有实体的Id,并存⼊Id数组中
AcDbObjectIdArray ObtainEntId(){ //获取块表 AcDbBlockTable *pBlkTbl; acdbHostApplicationServices()->w ...

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。