Java中Random对象总是生成相同随机数,我哪里操作错误?
问题分析与解决
嘿,我来帮你排查下为什么每次生成的随机数都是15~
核心问题:固定的随机数种子
你创建Random对象时传入了固定参数100:
Random random = new Random(100);
Java的Random类生成的是伪随机数,它的生成逻辑完全依赖于初始的「种子值」。如果每次都用相同的种子初始化Random,那么它生成的随机数序列会完全一致——这就是为什么你每次运行程序,random.nextInt(100)都会返回15的原因。
解决办法:使用动态种子
要让每次运行生成不同的随机数,只需要去掉构造方法里的固定种子,使用无参构造器即可:
Random random = new Random();
无参构造器会自动使用一个基于系统当前时间(或更复杂的随机源)的动态种子,每次启动程序时种子都不一样,生成的随机数自然就会变化了。
改进后的完整代码
import java.util.Random; import java.util.Scanner; public class Guess_tutorial { public static void main(String[] args) { // 去掉固定种子,使用动态种子初始化Random Random random = new Random(); int rand_num = random.nextInt(100); Scanner sc = new Scanner(System.in); System.out.println("Enter your number: "); int n = sc.nextInt(); while (n != rand_num) { if (n > rand_num) { System.out.println("Too high!"); } else { System.out.println("Too low!"); } n = sc.nextInt(); } sc.close(); System.out.println("That's right!"); } }
额外小提示
如果你使用的是Java 8及以上版本,也可以考虑用ThreadLocalRandom来生成随机数,它在多线程场景下性能更好,使用起来也很简单:
int rand_num = ThreadLocalRandom.current().nextInt(100);
(使用ThreadLocalRandom不需要手动创建对象,直接调用静态方法即可)
内容的提问来源于stack exchange,提问作者Hrvoje T
相关产品推荐
相关产品推荐

