Java Random.nextLong() 产生负数问题分析及解决方法
根据 Java 中 Random 类的 nextLong 方法的文档,该方法返回一个长整型的随机数,范围在 Long.MIN_VALUE (-9223372036854775808) 和 Long.MAX_VALUE (9223372036854775807) 之间。因此,表达式 '100 + Random(100).nextLong()' 的结果应该是一个在 100 到 Long.MAX_VALUE 之间的随机数。
然而,根据给出的结果 -1006715037030141991,可以看出该结果小于 100,这意味着表达式的结果不应该是这个随机数。
可能的解释是在代码中,'Random(100)' 这部分可能是指使用种子值为 100 来初始化 Random 类的实例。这样做会导致 Random 类生成的随机数序列是确定性的,每次运行程序都会生成相同的随机数序列。因此,如果在代码的其他地方使用了 Random 类的实例,并且在调用 nextLong 方法之前调用了其他的 next 方法,那么可能会导致随机数序列的偏移,进而导致不同的随机数生成。
要解决这个问题,可以将 Random 类的实例化移动到表达式的外部,以便只实例化一次,并将生成的随机数用作表达式的一部分,例如:
Random random = new Random();
long randomLong = random.nextLong();
long result = 100 + randomLong;
原文地址: https://www.cveoy.top/t/topic/lHLf 著作权归作者所有。请勿转载和采集!