Java 中要生成一个指定范围之内的随机数字有两种方法


以一
以一 2023-12-31 03:05:13 67680 赞同 0 反对 0
分类: 资源
一种是调用 Math 类的 random() 方法,一种是使用 Random 类。

在 Java 中要生成一个指定范围之内的随机数字有两种方法:一种是调用 Math 类的 random() 方法,一种是使用 Random 类。

Random 类提供了丰富的随机数生成方法,可以产生 boolean、int、long、float、byte 数组以及 double 类型的随机数,这是它与 random() 方法最大的不同之处。random() 方法只能产生 double 类型的 0~1 的随机数。

Random 类位于 java.util 包中,该类常用的有如下两个构造方法。

  • Random():该构造方法使用一个和当前系统时间对应的数字作为种子数,然后使用这个种子数构造 Random 对象。
  • Random(long seed):使用单个 long 类型的参数创建一个新的随机数生成器。


Random 类提供的所有方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的概率是均等的,在表 1 中列出了 Random 类中常用的方法。
 

表 1 Random 类的常用方法
方法 说明
boolean nextBoolean() 生成一个随机的 boolean 值,生成 true 和 false 的值概率相等
double nextDouble() 生成一个随机的 double 值,数值介于 [0,1.0),含 0 而不包含 1.0
int nextlnt() 生成一个随机的 int 值,该值介于 int 的区间,也就是 -231~231-1。如果
需要生成指定区间的 int 值,则需要进行一定的数学变换
int nextlnt(int n) 生成一个随机的 int 值,该值介于 [0,n),包含 0 而不包含 n。如果想生成
指定区间的 int 值,也需要进行一定的数学变换
void setSeed(long seed) 重新设置 Random 对象中的种子数。设置完种子数以后的 Random 对象
和相同种子数使用 new 关键字创建出的 Random 对象相同
long nextLong() 返回一个随机长整型数字
boolean nextBoolean() 返回一个随机布尔型值
float nextFloat() 返回一个随机浮点型数字
double nextDouble() 返回一个随机双精度值

例 1

下面编写一个 Java 程序,演示如何使用 Random 类提供的方法来生成随机数。具体代码如下:

  1. import java.util.Random;
  2.  
  3. public class Test06 {
  4. public static void main(String[] args) {
  5. Random r = new Random();
  6. double d1 = r.nextDouble(); // 生成[0,1.0]区间的小数
  7. double d2 = r.nextDouble() * 7; // 生成[0,7.0]区间的小数
  8. int i1 = r.nextInt(10); // 生成[0,10]区间的整数
  9. int i2 = r.nextInt(18) - 3; // 生成[-3,15)区间的整数
  10. long l1 = r.nextLong(); // 生成一个随机长整型值
  11. boolean b1 = r.nextBoolean(); // 生成一个随机布尔型值
  12. float f1 = r.nextFloat(); // 生成一个随机浮点型值
  13. System.out.println("生成的[0,1.0]区间的小数是:" + d1);
  14. System.out.println("生成的[0,7.0]区间的小数是:" + d2);
  15. System.out.println("生成的[0,10]区间的整数是:" + i1);
  16. System.out.println("生成的[-3,15]区间的整数是:" + i2);
  17. System.out.println("生成一个随机长整型值:" + l1);
  18. System.out.println("生成一个随机布尔型值:" + b1);
  19. System.out.println("生成一个随机浮点型值:" + f1);
  20. System.out.print("下期七星彩开奖号码预测:");
  21. for (int i = 1; i < 8; i++) {
  22. int num = r.nextInt(9); // 生成[0,9]区间的整数
  23. System.out.print(num);
  24. }
  25. }
  26. }

本实例每次运行时结果都不相同,这就实现了随机产生数据的功能。该程序的运行结果如下:

生成的[0,1.0]区间的小数是:0.8773165855918825
生成的[0,7.0]区间的小数是:6.407083074782282
生成的[0,10]区间的整数是:5
生成的[-3,15]区间的整数是:4
生成一个随机长整型值:-8462847591661221914
生成一个随机布尔型值:false
生成一个随机浮点型值:0.6397003
下期七星彩开奖号码预测:0227168

例 2

Math 类的 random() 方法没有参数,它默认会返回大于等于 0.0、小于 1.0 的 double 类型随机数,即 0<=随机数<1.0。对 random() 方法返回的数字稍加处理,即可实现产生任意范围随机数的功能。

下面使用 random() 方法实现随机生成一个 2~100 偶数的功能。具体代码如下:

  1. public class Test07 {
  2. public static void main(String[] args) {
  3. int min = 2; // 定义随机数的最小值
  4. int max = 102; // 定义随机数的最大值
  5. // 产生一个2~100的数
  6. int s = (int) min + (int) (Math.random() * (max - min));
  7. if (s % 2 == 0) {
  8. // 如果是偶数就输出
  9. System.out.println("随机数是:" + s);
  10. } else {
  11. // 如果是奇数就加1后输出
  12. System.out.println("随机数是:" + (s + 1));
  13. }
  14. }
  15. }

由于 m+(int)(Math.random()*n) 语句可以获取 m~m+n 的随机数,所以 2+(int)(Math. random()*(102-2)) 表达式可以求出 2~100 的随机数。在产生这个区间的随机数后还需要判断是否为偶数,这里使用了对 2 取余数,如果余数不是零,说明随机数是奇数,此时将随机数加 1 后再输出。

该程序的运行结果如下:

随机数是:20

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
以一L0
粉丝 0 资源 1143 + 关注 私信
最近热门资源
麒麟系统版本介绍白皮书  509
MiSans 阿拉伯语字体文件  450
解决新版本麒麟系统中微信打开白屏显示  393
麒麟系统进行系统监控,查看进程的运行时间来优化性能  326
临时关闭swap分区与永久关闭swap分区(注意必须确保系统有足够内存运行!)  217
统信桌面专业版添加字体  210
统信uos单一程序黑屏,任务栏正常显示解决办法  209
统信uos快捷键文档  181
统信系统双无线网卡设置关闭开启单一网卡  144
分享一个磁盘恢复工具,适用于多平台(包括统信)  119
最近下载排行榜
麒麟系统版本介绍白皮书 0
MiSans 阿拉伯语字体文件 0
解决新版本麒麟系统中微信打开白屏显示 0
麒麟系统进行系统监控,查看进程的运行时间来优化性能 0
临时关闭swap分区与永久关闭swap分区(注意必须确保系统有足够内存运行!) 0
统信桌面专业版添加字体 0
统信uos单一程序黑屏,任务栏正常显示解决办法 0
统信uos快捷键文档 0
统信系统双无线网卡设置关闭开启单一网卡 0
分享一个磁盘恢复工具,适用于多平台(包括统信) 0
作者收入月榜
1

prtyaa 收益399.62元

2

zlj141319 收益236.11元

3

IT-feng 收益219.61元

4

1843880570 收益214.2元

5

风晓 收益208.24元

6

哆啦漫漫喵 收益204.5元

7

777 收益173.07元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!