Java如何生成随机数?要不要了解一下!

前言

我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。

一、Random类介绍

在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。Random 单词本身就是随机、随意、任意的意思。Random 是一个普通类,所以在使用时需要创建 Random 对象,在调用其提供的方法。

public class Random implements java.io.Serializable {}

Random 类提供了诸多方法,如下图:

微信截图_20230816105916.png

二、Random类生成随机数

1.生成随机数

在 Java 中,可以使用 java.util.Random 类来生成随机数。 Random 类提供了多个方法来生成不同种类的随机数,例如 nextInt()nextDouble() 等。

我们这里演示如何生成一个介于0到9之间的随机整数:

import java.util.Random;

public class RandomTest {
    public static void main(String[] args) {
        // 创建Random实例
        Random random = new Random();
        // 生成0到9之间的随机数
        int randomNum = random.nextInt(10); 
        System.out.println(randomNum);
    }
}

在上面的示例代码中,首先创建了一个 Random 对象,然后使用 nextInt() 方法生成一个介于0到9之间的随机整数,并将结果打印到控制台上。

2.nextInt()方法

nextInt(int bound) 方法是 Random 类的一个实例方法,它用于生成一个介于0(包括0)和指定值(不包括该值)之间的随机整数。

我们之前使用 nextInt(int bound) 方法生成 0-9 之间的随机数:

Random random = new Random();
int randomNum = random.nextInt(10);
System.out.println(randomNum);

代码中使用 Random 类的默认构造函数创建一个随机数生成器对象,然后调用 nextInt(int bound) 方法生成介于 0(包括 0)和 10(不包括 10)之间的随机整数(多次提及且加粗),最后将结果存储到 randomNum 变量中并打印到控制台上。

这个方法的实现原理是根据随机数生成器的内部状态生成随机数。如果指定的 bound 参数是正数,则生成的随机数即为 0 到 bound 之间的某个整数。如果 bound 是负数或者 0,则会抛出 IllegalArgumentException 异常。需要注意的是,生成的随机数是伪随机数,其实际上是一个确定性的函数,但是它的表现看上去是随机的。

对于 Random.nextInt(int bound) 方法,需要特别注意 bound 参数的取值范围。如果生成的随机数不是 0 到 bound 之间,那么就可能会对一些应用产生负面影响,比如在密码学应用中可能会导致漏洞。因此,在使用该方法时,需要仔细检查 bound 参数的取值范围,并对其进行适当的限制。

那么除了 nextInt() 方法,还有 nextLong()nextBoolean()nextFloat()nextDouble() 等。

三、使用场景

Java 随机数生成器可以在很多场景下使用,比如在游戏开发中,可以随机生成怪物、地图、道具等;如果涉及密码,可以在加密过程中需要生成随机数,如在生成密钥的时候生成长度随机的盐值;也可以进行测试和演练:可以使用随机数生成器来生产测试数据、观测数据等等;

总之,随机数的使用非常广泛,任何需要模拟随机的场景都可以使用 Java 提供的随机数生成器生成随机数。

我们大都有选择困难症,比如不知道午饭吃什么?很头疼!那就让上天来决定吧!我们使用 Java 随机数来随意抽取或是决定午饭。

import java.util.Random;

public class RandomLunch {
    public static void main(String[] args) {
        String[] foods = {"汉堡", "炸鸡", "披萨", "烤肉", "牛肉面", "米线", "酸菜鱼", "煲仔饭", "火锅", "小笼包"}; //可以选择的午餐品种
        Random random = new Random();
        int index = random.nextInt(foods.length); // 生成0到可选菜品数量之间的一个随机整数
        String lunch = foods[index]; // 根据随机数选定菜品
        System.out.println("午饭吃" + lunch);
    }
}

上面的代码中,首先定义了一个数组中,存储了可以选择的午餐品种。然后使用 java.util.Random 类创建一个随机数生成器对象,使用 nextInt(int bound) 方法生成一个介于 0 和可选菜品数量之间的随机数。最后,使用这个随机数从菜品数组中选择一个菜品,将其存储到字符串变量 lunch 中,并输出午餐的选择结果。

在实际开发中,可以将类似的代码集成到提供菜品选择功能的系统中,方便办公室的小伙伴们快速决定午餐。

四、官方提示

java.util.Random 的实例是线程安全的。但是,跨线程并发使用同一个 java.util.Random 实例可能会遇到争用,从而导致性能下降。考虑在多线程设计中使用 java.util.concurrent.ThreadLocalRandom

java.util.Random 的实例不是加密安全的。请考虑使用 java.security.SecureRandom 来获得加密安全的伪随机数生成器,以供对安全性敏感的应用程序使用。

总结

Java 随机数的使用场景还是很多的,所以我们要对其进行掌握,本文对 Java 生成随机数的类 Random 进行了简单介绍,如果想深入了解,要查看其源码,去实操,去探究。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务