Java 的 java.util.Random 类中,seed(随机种子)

Java 的 java.util.Random 类中,seed(随机种子)

seed(随机种子)用于初始化伪随机数生成器。伪随机数生成器是基于确定性算法的,它通过一个初始值(即种子)来产生一系列看似随机的数值。

使用相同的种子值,可以确保在相同的环境下生成相同的随机数序列。这在某些情况下是非常有用的,例如在调试或复现问题时,可以固定随机数的输出。
另外,随机种子的选择也会影响到随机数的序列。如果使用不同的种子值,每次生成的随机数序列都会有所不同。

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        long seed = 12345L;
        Random random = new Random(seed);

        // 生成随机数
        int randomNumber1 = random.nextInt();
        int randomNumber2 = random.nextInt();

        System.out.println("Random Number 1: " + randomNumber1);
        System.out.println("Random Number 2: " + randomNumber2);
    }
}

在上面的示例中,我们通过将种子值设为 12345L 来创建了 Random 对象。然后,使用 nextInt() 方法生成两个随机数。由于种子值相同,每次运行程序时生成的随机数序列都是相同的。
如果你不想使用`java.util.Random`来生成随机数,可以手动编写一个伪随机数生成函数。在这种情况下,我们可以利用当前时间戳(系统提供的一个基本不可预测的值)作为种子来创建一个简单的伪随机数生成器。这里提供一个基于时间戳的猜数字游戏例子: ```java import java.time.Instant; public class GuessNumberGame { private long seed; public GuessNumberGame() { this.seed = Instant.now().toEpochMilli(); // 利用当前时间作为种子 } public boolean isGuessCorrect(int numberToGuess) { // 将种子转换为一个范围内的随机数 long randomNum = ((seed * 1000000L) + Thread.currentThread().getId()) % 100; return randomNum == numberToGuess; } public int playGame() { int key = generateKey(); // 自定义生成关键数的函数 int guess = -1; int attempts = 0; while (guess != key) { System.out.print("请输入你猜的数字(1-100):"); guess = scanner.nextInt(); attempts++; if (guess < key) { System.out.println("太小了,请继续猜。"); } else if (guess > key) { System.out.println("太大了,请继续猜。"); } } System.out.printf("恭喜你,猜对了!你用了%d次尝试。\n", attempts); return key; } // 替代random.nextInt(100),自定义生成关键数的函数 private int generateKey() { return (int) Math.floor(Math.random() * 100) + 1; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); GuessNumberGame game = new GuessNumberGame(); int key = game.playGame(); scanner.close(); } } ``` 在这个版本中,`generateKey()` 函数代替了 `Random` 来生成一个1到100之间的随机数。请注意,这个伪随机数生成器并不如 `java.util.Random` 一样强大和可靠,仅用于演示目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值