Java中指定范围内的随机数生成:教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java中的随机数:从混沌到有序

\n\n

你好,未来的Java开发者!如果你曾经编写过游戏、模拟程序、测试用例,或者只是想为你的程序增加一点意外元素,那么你肯定遇到过需要获取指定范围内的随机整数的情况。看起来很简单,对吧?但在实践中,新手经常会有这样的疑问:“为什么我得到的是0到100之间的数字,而不是50到100?”或者“为什么我的代码会报错?”

\n\n

今天,我们将一劳永逸地解决这个问题。你将学会如何在Java中生成任意范围内的随机数,使用三种主要方法。剧透:其中一种方法在90%的情况下是最佳选择。我们开始吧!

\n\n

为什么这很重要?

\n

随机数生成是一项基础但至关重要的任务。以下场景离不开它:

\n
    \n
  • 创建测试数据(例如,用户ID)。
  • \n
  • 实现游戏机制(物品掉落、关卡生成)。
  • \n
  • 模拟随机过程(队列、流量)。
  • \n
  • 从列表中随机选择元素。
  • \n
\n\n

掌握了这个主题,你将不再害怕代码中的“魔法”,并能自信地控制随机性。

\n\n

方法一:经典方法 — java.util.Random

\n

这是Java中所有生成器的鼻祖。java.util.Random类从最早的版本就存在,至今仍被广泛使用。它的主要优点是通用性。

\n\n

如何获取从0到N的随机整数?

\n

nextInt(int bound)方法返回一个从0(包含)到bound(不包含)的随机数。也就是说,如果你写nextInt(10),你会得到0到9之间的数字。

\n\n
import java.util.Random;\n\npublic class RandomExample {\n    public static void main(String[] args) {\n        Random random = new Random();\n        int number = random.nextInt(10); // 0..9\n        System.out.println("随机数: " + number);\n    }\n}
\n\n

如何生成5到15之间的数?

\n

这就是关键所在。要获取任意范围[min, max]内的数字,需要使用公式:

\n

min + random.nextInt(max - min + 1)

\n

我们以5到15的范围为例进行解析。

\n
    \n
  • max - min + 1 = 15 - 5 + 1 = 11。因此nextInt(11)会返回0到10之间的数字。
  • \n
  • 加上min(5):得到范围5..15。
  • \n
\n

验证一下:如果nextInt(11)返回0,那么0+5 = 5。如果返回10,那么10+5 = 15。完美!

\n\n
Random random = new Random();\nint min = 5;\nint max = 15;\nint randomNumber = min + random.nextInt(max - min + 1);\nSystem.out.println("5到15之间的随机数: " + randomNumber);
\n\n

重要提示:别忘了+1!没有它,最大值会少1。

\n\n

方法二:现代方法 — ThreadLocalRandom

\n

从Java 7开始,出现了ThreadLocalRandom类。它专门针对多线程应用程序进行了优化(但在单线程中也能很好地工作)。主要优点是它比Random更快,并且不需要创建单独的对象。

\n\n

在单线程代码中的使用

\n

它有一个方便的方法nextInt(int origin, int bound),可以直接接受范围边界!请注意:origin包含,bound不包含。如果你需要包含上边界,只需加1即可。

\n\n
import java.util.concurrent.ThreadLocalRandom;\n\npublic class ThreadLocalRandomExample {\n    public static void main(String[] args) {\n        // 5到15之间的数字(包含)\n        int randomNumber = ThreadLocalRandom.current().nextInt(5, 16);\n        System.out.println("随机数: " + randomNumber);\n    }\n}
\n\n

看到了吗?多么简单!无需任何公式,

博客

书籍推荐