#随机数#生成指定范围的随机数

Wesley13
• 阅读 638

#随机数#生成指定范围的随机数

捡起丢下一个多月的Java,重新复习书本上的东西,来到随机数这一部分:
问题:生成指定范围的随机数,比如生成[10,20)区间内的随机整数、生成[0,50]区间内的随机整数。

Java内有两种实现伪随机数的方法,一种是java.util.Random(需要手动导入),另一种是Math.random

##1.基于Random类

import java.util.Random;

/**
 * Created by Administrator on 2016/11/26.
 */
public class Ram {
    public static void main(String[] args){
        Random b = new Random(20);
        int a = b.nextInt(51);
        while (a != 50){
            a = b.nextInt(51);
            System.out.println(a);
            if (a == 50){
                System.out.println("Hell yeah");
            }
        }
        System.out.println(a);
    }
}

解释下:在实例化时的20只是作为一个种子,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系,如果没有指定数字,则使用系统时间作为种子

nextInt或者nextDouble是指定一个数的最大范围,但不包括这个数,上面的代码生成的是[0,50]的整数,输出的仅是为了方便查看结果

##2.基于后者

/**
 * Created by Administrator on 2016/11/27.
 */
public class Ram1 {
    public static void main(String[] args){
        int a = (int)(Math.random()*51);
        while (a != 50){
            a = (int)(Math.random()*51);
            System.out.println(a);
            if (a == 50){
                System.out.println(a);
                break;
            }
        }
        System.out.println(a);
    }
}

random()会生成一个[0,1)内的浮点数,如果你想生成[0,50]的整数,你需要在Math.random()后乘51,再进行显式转换。如果你想把区间收缩,比如[10,50],你需要在乘41后再加10,这样,最小的数值就是10,而最大的数值不会超过51,显式转换后就会是50

下面的代码是用random函数来生成[10,20)里的随机数:

public class Ram1 {
    public static void main(String[] args){
        for(int i = 0;i < 15;i++){
            int a = (int)(Math.random()*10+10);
            System.out.println(a);
        }
    }
}

输出的结果:

19
19
12
18
10
13
16
18
11
10
10
16
14
15
19

另一种实现:

import java.util.Random;

/**
 * Created by Administrator on 2016/11/26.
 */
public class Ram {
    public static void main(String[] args){
        Random b = new Random();
        for(int i = 0;i < 15;i++){
            int a = b.nextInt(10)+10;
            System.out.println(a);
        }
    }
}

两种方案都相当接近,使用时视情况选择吧,就酱

##一篇比较好的参考 随机数

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
liam liam
1年前
Mock 语法讲解
是生成随机数据,拦截Ajax请求的JavaScript库。本文来介绍下Mock的常用语法。模拟数据生成随机数据Mock.Random.boolean()生成一个随机的布尔值。例如:返回值为true或false。Mock.Random.integer(min
分布式id如何生成
1.UUID生成通过网卡、时间、随机数来保证生成的唯一的字符串。优点:(1)本地生成,生成简单(2)速度快(3)高可用;缺点:(1)无序,如果存入mysq,影响B的操作性能,因为B树是需要排序的;(2)占用空间较大(36个
Wesley13 Wesley13
3年前
Java Random类、ThreadLocalRandom类
Random和ThreadLocalRandom类均用于生成伪随机数。Random的构造函数:Random()   默认以系统当前时间为种子,相当于Random(System.currentTimeMillis())Random(long seed)常用方法:nextXxx()  生成对应类型的伪随机数。示例:Rando
Wesley13 Wesley13
3年前
Java 生成随机数
Java中常用的两种产生随机数的方法一、java.lang.Math类中的random()方法;调用这个Math.random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是\0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀
分布式系统的主键生成方案对比 | 京东云技术团队
UUID​UUID(通用唯一识别码)是由32个十六进制数组成的无序字符串,通过一定的算法计算出来。为了保证其唯一性,UUID规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。
小万哥 小万哥
5个月前
NumPy 均匀分布模拟及 Seaborn 可视化教程
本文介绍了均匀分布和逻辑分布。均匀分布是连续概率分布,所有事件在指定范围内有相等概率发生,常用于随机数生成。其概率密度函数为f(x)1/(ba),其中a和b分别为下限和上限。NumPy的random.uniform()可生成均匀分布的随机数。Seaborn可用于可视化分布。文中还提供了练习及解决方案,包括生成不同范围的均匀分布随机数、比较分布形状变化及模拟抛硬币实验。逻辑分布则常用于S形增长现象的建模,其PDF为(scale/(π(1(xloc)/scale)^2)),由位置参数loc和尺度参数scale定义。