JAVA资格认证:Java随机数总结

JAVA资格认证:Java随机数总结,第1张

JAVA资格认证:Java随机数总结,第2张

数字在实践中被广泛使用,比如生成一个固定长度的字符串或数字。或者立即生成不确定长度的数字,或者进行模拟随机选择,等等。Java提供了最基本的工具来帮助开发者实现这一切。
一、Java中随机数的产生方式
在Java中,广义的随机数有三种。
1。通过System.currentTimeMillis()获取当前时间的长毫秒数。
2。通过Math.random()返回一个介于0和1之间的double值。
3。通过Random类生成一个随机数。这是一个专业的随机工具类,功能强大。
二。随机类的API描述
1。Java API描述
random类的实例用于生成伪随机数流。该类使用48位种子,通过线性同余公式进行修改(参见Donald Knuth的《计算机编程艺术》第2卷第3.2.1节)。
如果用相同的种子创建两个随机实例,将为每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了确保属性的实现,为类Random指定了特定的算法。
许多应用程序会发现数学课中的random方法更容易使用。
2。方法摘要
Random()
创建一个新的随机数生成器。
Random(长种子)
使用单个长种子创建一个新的随机数生成器:public random(长种子){set seed(种子);} next方法用它来保存随机数生成器的状态。
protected int next(int bits)
生成下一个伪随机数。
Boolean next Boolean()
返回下一个伪随机数,它是从这个随机数生成器的序列中提取的均匀分布的布尔值。
void next bytes(byte[]bytes)
生成随机字节,放入用户提供的字节数组中。
double nextDouble()
返回下一个伪随机数,该伪随机数是从该随机数生成器的序列中取出的双精度值,均匀分布在0.0和1.0之间。
float nextFloat()
返回下一个伪随机数,它是从这个随机数生成器的序列中均匀分布在0.0和1.0之间的浮点值。
DoubleNextGaussian()
返回下一个伪随机数,它是一个高斯(“正态”)分布的double值,取自此随机数生成器的序列。其平均值为0.0,标准差为1.0。
int nextInt()
返回下一个伪随机数,它是这个随机数生成器序列中均匀分布的int值。
int nextInt(int n)
返回一个伪随机数,该伪随机数是从该随机数生成器的序列中取出的一个int值,该值均匀分布在0(包括0)和指定值(不包括0)之间。
long nextlong()
返回下一个伪随机数,它是从这个随机数生成器的序列中提取的一个均匀分布的长型值。
void set seed(long seed)
使用单个long seed来设置此随机数生成器的种子。
三。Random class的使用说明
1。有种子和无籽随机类的区别
随机类的基本用途是战略分区种子和无籽随机的实例。
通俗点说,两者的区别就是:
有了种子,每次运行产生的结果都是一样的。
没有种子,每次运行生成的都是随机的,根本没有规律可言。
2。创建一个没有种子的随机对象
Random Random = new Random();
3。创建一个没有种子的随机对象有两种方法
:
1)Random Random = new Random(555 l);
2)Random Random = new Random();
random . setseed(555 l);四。Test
举例说明上述用法
import Java . util . random;
/**
* Java随机数测试
*用户:雷志民
*日期:2008-11-19 17:52:50
*/
公共类测试Random Public static void main(String[]args){
Random Test();
testNoSeed();
testseed 1();
testseed 2();
}
public static void randomTest(){
system . out . println("-test()-");
//返回以毫秒为单位的当前时间。
long R1 = system . current time millis();
//返回一个大于等于0.0且小于1.0的带正号的double值。
double R2 = math . random();
//通过Random类
int R3 = new random()获取下一个随机整数。nextint();
system . out . println(" R1 = "+R1);
system . out . println(" R3 = "+R2);
system . out . println(" R2 = "+R3);
}
public static void testNoSeed(){
system . out . println("-testNoSeed()-");
//创建一个没有种子的测试随机对象
Random Random = new Random();
for(int I = 0;I < 3;i++){
system . out . println(random . nextint());
}
}
public static void testseed 1(){
system . out . println("-testseed 1()-");
//用种子创建一个测试随机对象
Random Random = new Random(555 l);
for(int I = 0;I < 3;i++){
system . out . println(random . nextint());
}
}
public static void testseed 2(){
system . out . println("-testseed 2()-");
//创建一个带有种子的测试随机对象
Random Random = new Random();
random . setseed(555 l);
for(int I = 0;I < 3;i++){
system . out . println(random . nextint());
}
}
]运行结果:
-[/]R2 =-368083737
-testNoSeed()-
809503475
1585541532
-645134204
-testseed 1()-
-1367481220

没有种子,每次运行的结果都是随机的。五、综合应用
下面通过最近写的一个随机数工具类展示用法:
导入Java . util . random;
/**
*随机数和随机字符串工具
*用户:雷志民
*日期:2008-11-19 9 9:43:09
*/
Public类Public static final String all char = " 0123456789 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz ";
public static final String letter char = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
public static final String number char = " 0123456789 ";
/**
*返回固定长度的随机字符串(仅限大小写字母和数字)
*
* @param length随机字符串长度
* @返回随机字符串
*/
public static String generate String(int length){
String buffer sb = new String buffer();
Random Random = new Random();
for(int I = 0;I <长度;i++){
sb . append(all char . charat(random . nextint(all char . length())));
}
return sb . tostring();
}
/**
*返回一个固定长度的随机纯字母字符串(仅大小写字母)
* @ paramlength随机字符串长度
* @返回随机字符串
*/[public static String generateMixString(int length){
String buffer sb = new String buffer();
Random Random = new Random();
for(int I = 0;I <长度;i++){
sb . append(all char . charat(random . nextint(letter char . length())));
}
return sb . tostring();
}
/**
*返回一个全大写字母(仅大小写字母)的定长随机字符串
* @ paramlength随机字符串长度
* @ return random String
*/public static String generateLowerString(int length){
return generateMixString(length)。toLowerCase();
}
/**
*返回一个只有小写字母的定长随机字符串
*
* @param length随机字符串长度
* @ return random String
*/public static String generateuperstring(int length){
return generateMixString(length)。toupper case();
}
/**
*生成固定长度的纯0字符串
*
* @param length字符串长度
* @返回纯0字符串
*/
公共静态字符串generateZeroString(int length){
String buffer sb = new String buffer();
for(int I = 0;I <长度;i++){
sb . append(' 0 ');
}
return sb . tostring();
}
/**
*根据数字生成定长字符串,长度不够前面加0
* @ param num number
* @ param fix length字符串长度
* @返回定长字符串
*/
公共静态字符串toFixdLengthString(long num,int fixdlenth){
String buffer sb = new String
String strNum = String . value of(num);
if(fixd lenth-strnum . length()> = 0){
sb . append(generateZeroString(fixd lenth-strnum . length());
} else {
throw new runtime exception("当数字"+num+"转换为长度为"+fixdlenth+"的字符串时会出现异常!");
}
sb . append(strNum);
return sb . tostring();
}
/**
*根据数字生成定长字符串,长度不够前面加0
* @ param num number
* @ param fix length字符串长度
* @返回定长字符串
*/
公共静态字符串toFixdLengthString(int num,int fixdlenth){
String buffer sb = new String
String strNum = String . value of(num);
if(fixd lenth-strnum . length()> = 0){
sb . append(generateZeroString(fixd lenth-strnum . length());
} else {
throw new runtime exception("当数字"+num+"转换为长度为"+fixdlenth+"的字符串时会出现异常!");
}
sb . append(strNum);
return sb . tostring();
}
public static void main(String[]args){
system . out . println(generate String(15));
system . out . println(generateMixString(15));
system . out . println(generateLowerString(15));
system . out . println(generateuperstring(15));
system . out . println(generateZeroString(15));
system . out . println(toFixdLengthString(123,15));
system . out . println(toFixdLengthString(123 l,15));
}
}
运行结果:
vwmbzfgcphg
23 hyrahdjkkpwmv
tigowetwkm1 NDE
bpz 1 knejphb 115n
。br/]0000000000000123
0000000000123
进程结束,退出代码为0
VI。总结1。随机数是常用的,Java中有三种生成方式,其中随机数最复杂。
2。随机类对象可以分为有没有种子。只要种子相同,多次运行后生成随机数的结果总是一样的。
3。使用系统初始随机数创建系统初始对象的方法有两种,效果相同。但是带种子的随机数好像用处不大。
4。Random的函数覆盖了Math.random()的函数。
5。随机数可以用来实现随机字符串等复杂的随机数据。
6。不要研究不重复的随机数,意义不大。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » JAVA资格认证:Java随机数总结

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情