Java生成在线随机数生成器的几种高级用法

博客分类:
在实际开发工作中经常需要用到随机数。如有些系统中创建用户后会给用户一个随机的初始化密码。笔者这里就以Java语言为例,谈谈Java随机数生成的方法以及一些技巧。
在实际开发打工中经常需求用到随机数。如有些系统中创建用户后会给用户一个的随机的初始化密码。笔者那里就以Java语言为例,谈谈Java随机数生成的窍门以及一些窍门。
一、利用random窍门来生成Java随机数。
在Java语言中生成Java随机数相对来说较量简单,由于有一个的现成的窍门没成绩应用。在Math类中,Java语言帮助了一个的叫做random的窍门。经过那个窍门没成绩让系统产生随机数。不过默认情况下,其产生的随机数范围较量小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围较量小,不能够满足日常的需求。如日常打工中估计需求产生整数的随机数。其实,只要对那个窍门停止一些灵活的处理,就没成绩获取任意范围的随机数。
如咱们没成绩先经过random窍门生成一个的随机数,然后将结果乘以10。此时产生的随机数字即为大于等于0小于10的数字。然后再利用Int窍门停止convert(它会去掉小数掉后面的数字,即只获取整数部份,不是四舍五入)。最后即可获取一个的0到9的整数型随机数字。其出现窍门很简单,那是对原有的random窍门按照如下的格式停止变型:(int)(Math.Random()*10)即可。其实咱们还没成绩对那个窍门停止扩展,让其产生任意范围内的随机数。至需求将那个10换成n即可,如改为(int)(Math.Random()*n)。此时实际运用程序就会产生一个的大于等于0小与n之间的随机数。如将n设置为5,那么其就会产生一个的0到5之间的整数型的随机数。假如将那个写成一个的带参数的窍门,那么只要用户输入需求生成随机数的最大value,就没成绩让那个窍门来生成制定范围的随机数。在Java中定义自己的道具库
有时间程序员估计需求生成一个的指定范围内的随机偶数或者奇数。此时也许没成绩经过那个窍门来出现呢?正确回答是肯定的。如目前程序要需求生成一个的1-100范围内的偶数。此时该如何出现?首先,需求生成一个的0到99之内的随机数(至于那里为什么是99,耐心看下去就明白理由了)。要出现那个需求,很简单吧,只要经过如下语句就没成绩出现: i=1+(int)(Math.Random()*100)。其中(int)(Math.Random()*99)产生0到99的整数型随机数。然后再加上1那是产生1到100之间的随机整数。然后将产生的随机数赋value给变量i。但是此时其产生的随机数即有偶数,又有奇数。而目前程序员需求的是一个的随机的偶数。那么咱们没成绩在后面加上一个的if判断语句。将那个随机数除以2,假如没有余数的话(或者余数为0)则表明那个随机数是偶数,直接返回即可。假如其返回的余数不为零,那么就表明其是奇数,咱们只要加上1就变为了偶数,返回即可。留意,在上面的随机数生成中,笔者采用的范围是0到99,然后再加上1让其变为1到100的随机数。最后的结果那是生成1到100之间的随机偶数。其实,假如要范围随机奇数的话,至需求对上面的语句停止稍微的改正即可。Java:改变你我的全球
假设目前用户想生成一个的任意范围内的奇数或者偶数,能够出现吗?假设目前用户想出现一个的m到n之间的任意偶数(其中m
可见虽然random窍门其自身产生的随机数有较量严格的范围控制。但是只要对其停止符合逻辑的convert,程序员仍然没成绩采用那个窍门产生用户所需求的随机数据。
二、经过Random类来生成随机数。
在Java语言中,除了没成绩经过random 窍门来产生随机数之外,还没成绩经过一个的random类来产生随机数。程序开发没成绩经过举例化一个的Random对象来创建一个的随机数的生成器。如Random i=new Random()。经过这条语句就利用了Random类创建了一个的随机数的生成器。不过以这种窍门创建随机数时,与采用Random窍门产生随机数的机制不相同。利用目前这种方法举例化对象时,Java编译器会以系统当前的时间作为随机数生成器的种子。由于时间时时刻刻在变化的。若以那个时间作为生成器的种子,就没成绩保证生成的随机数真的是随机的,其生成的随机数重复率会大大的降低。
利用这种窍门其较量方便。如没成绩利用帮助的KEYexpress,让程序返回一个的随机的整数(采用int besideInt(10))等等。不过其返回控制要比Random窍门困难一点。如目前需求系统帮助一个的10到50之间的随机奇数, 利用那个Random类就无法完成。也那是说,利用那个Random类来生成随机数,其只能够控制上限,而不能够控制下限。换一句话说,其没成绩指定最大的随机数范围,而不能够指定最小的随机数范围。所以,在灵活性上,其比Random窍门要稍微差一点。
另外利用那个窍门来出现的话,必需先创建一个的对象。也那是说利用Randow类来创建对象。这跟Randow窍门不相同。像上面举的例子中,Randow窍门本身那是一个的math类中窍门,没成绩直接调用,省去对象创建的窍门。为此笔者意见各位读者与程序开发,最好还是应用Random窍门来创建随机数。只有在生成一些较量特殊的随机数时采用Random类。如目前需求生成一个的概率密度为高斯分布的双精度value随机数时,则经过采用Random类的窍门来创建随机数相对来说较量简单一点。
三、产生随机的char。
上面介绍的两种窍门,产生的都是随机的数value型数据。但是有时间用户估计还需求产生随机的char。其实也没成绩利用random窍门来产生随机char。如没成绩利用源代码生成一个的随机的小写char:(char)(‘a’+Math.random()*(‘z’-‘a’+1))。其实这跟生成任意两个数之间的随机数类似。经过以上的源代码就没成绩生成一个的范围之内的任意随机char。经过对那个源代码停止适当的修整,还没成绩生成任意两个char之间的随机char与任意大写char的随机char。其convert的方法跟上面提到的任意范围之内的随机数类似。各位读者若感兴趣的话,没成绩自己停止测试一下。师傅领进门,修行在自身。假如笔者在那里一股脑儿将所有的正确回答告诉,的印相不会很深。若回去自己动手试试看,反而更简易记住。
笔者在那里给一个的提示,只需求根据m+(int)(Math.Random()*(n-m))这条语句来调整(char)(‘a’+Math.random()*(‘z’-‘a’+1))那个源代码即可。
最后笔者需求强调的一点那是在用户传入参数的时间,最好要对用户传入的参数停止合法性检查。以免用户传入的参数不符合既定的要求,如参数需求的是数value型的数据而传入的却是char型的数据,而导致程序运行出错。
浏览: 208527 次
来自: 长沙
如果包含&,(,)...等特殊字符呢
这不能算是任意进制之间的转换,只能算是 2、8、10、16 几 ...
在本地执行了几遍,结果都是:s2开始休眠s1开始休眠s2休眠结 ...
这个例子 做不到“学生都交完” 考试结束,只能做到等到考试时间 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'利用Random类产生5个1~30之间(包括1和20)的随机整数,怎么做?
[问题点数:40分]
利用Random类产生5个1~30之间(包括1和20)的随机整数,怎么做?
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2017年8月 Java大版内专家分月排行榜第三2017年4月 Java大版内专家分月排行榜第三2016年3月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|博客分类:
一、JAVA中生成随机数的方式
1、在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j2me中没有;
int randomNumber = (int) Math.round(Math.random()*(max-min)+min);
2、在System类中有一个currentTimeMillis()方法,这个方法返回从号0点0分0秒到目前的一个long型的毫秒数,可作为一个随机数,还可以将其对某些数取模,就能限制随机数的范围;此方式在循环中同时产生多个随机数时,会是相同的值,有一定的局限性!
long randomNum = System.currentTimeMillis();
int randomNumber = (int) randomNum%(max-min)+
3、使用java.util.Random类来产生一个随机数发生器,这个也是我们在j2me的程序里经常用的一个取随机数的方法。它有两种形式的构造函数,分别是Random()和Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。随机数发生器(Random)对象产生以后,通过调用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。 如果两个Random对象使用相同的种子(比如都是25),并且以相同的顺序调用相同的函数,那它们返回值完全相同。
Random random = new Random();
int randomNumber =
random.nextInt(max)%(max-min+1) +
二、随机给定范围内N个不重复的数
1、方法一:最简单最易理解的两重循环去重
public static int[] randomCommon(int min, int max, int n){
if (n & (max - min + 1) || max & min) {
return null;
int[] result = new int[n];
int count = 0;
while(count & n) {
int num = (int) (Math.random() * (max - min)) +
boolean flag = true;
for (int j = 0; j & j++) {
if(num == result[j]){
flag = false;
result[count] =
2、方法二:利用HashSet的特征,只能存放不同的值
public static void randomSet(int min, int max, int n, HashSet&Integer& set) {
if (n & (max - min + 1) || max & min) {
for (int i = 0; i & i++) {
int num = (int) (Math.random() * (max - min)) +
set.add(num);
int setSize = set.size();
if (setSize & n) {
randomSet(min, max, n - setSize, set);
3、方法三:排除已随机到的数
public static int[] randomArray(int min,int max,int n){
int len = max-min+1;
if(max & min || n & len){
return null;
int[] source = new int[len];
for (int i = i & min+ i++){
source[i-min] =
int[] result = new int[n];
Random rd = new Random();
int index = 0;
for (int i = 0; i & result. i++) {
index = Math.abs(rd.nextInt() % len--);
result[i] = source[index];
source[index] = source[len];
调用实例:
public static void main(String[] args) {
int[] reult1 = randomCommon(20,50,10);
for (int i : reult1) {
System.out.println(i);
int[] reult2 = randomArray(20,50,10);
for (int i : reult2) {
System.out.println(i);
HashSet&Integer& set = new HashSet&Integer&();
randomSet(20,50,10,set);
for (int j : set) {
System.out.println(j);
浏览 11096
浏览: 86314 次
来自: 耒阳
初学oracle的飘过!!
&div class=&quote_title ...
让程序员醒悟什么?
francisyc 写道外包,非外包都待过,觉得外包并没有那么 ...
&div class=&quote_title ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
有时候,我们需要使用一个固定长度的随机数来区别每次的处理,下面介绍一个生成固定长度随机数的方法:
* 返回长度为【strLength】的随机数,在前面补0
private static String getFixLenthString(int strLength) {
Random rm = new Random();
// 获得随机数
double pross = (1 + rm.nextDouble()) * Math.pow(10, strLength);
// 将获得的获得随机数转化为字符串
String fixLenthString = String.valueOf(pross);
// 返回固定的长度的随机数
return fixLenthString.substring(1, strLength + 1);
while (i & 20) {
System.out.println(getFixLenthString(6));
运行的结果如下:
604694424607004302940936070123913861568485895916306356547788157092226976057814879469843503811623541682718168581883
浏览 35718
xng1234 写道lz这个生成7位的就不行了同问二楼同志的回答是可以解决七位的时候出现前面的一个小数点,但是这样修改的话,随机数最多只可以生成9位,再多的话,int就存不下了。如果需要更多的位的话,可以生成几个随机数的文字列,然后再拼接到一块儿。
lz这个生成7位的就不行了同问
浏览: 45130 次
&div class=&quote_title ...
&div class=&quote_title ...
int pross = (int)((1 + rm.nextD ...
lz这个生成7位的就不行了
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(3135)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'产生10个不同的随机数(java)',
blogAbstract:'import java.util.Rpublic class RandomNumber {&& & Random random=new Random();&& &&& & int b[]=new int[10];&& &&& &int[] ranNumber(){&& &&& &int n=0;&& &&& &while(n&10){&& &&& &b[n]=random.nextInt(10);&& &&& &&& &&& &if(n&=1){&& &&& &int i=0;&& &&& &while(i&n){',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 生成随机数 的文章

 

随机推荐