Java报错:java.util.Random.nextLong方法参数不匹配
解决Random.nextLong()参数不匹配的编译错误
引发报错的代码
protected static long random(long a, long b) { //Random random = new Random(); return a + new Random().nextLong(b - a); }
终端返回的错误信息
java: method nextLong in class java.util.Random cannot be applied to given types; 所需:无参数 提供:long 原因:实际参数与形式参数列表长度不符
报错原因
java.util.Random类的nextLong()方法本身是无参方法,但代码中调用时传入了long类型的参数b - a,导致参数列表长度不匹配,触发编译错误。
解决方案
如果需要生成范围在[a, b)之间的随机long值,推荐使用Java 8及以上提供的longs(long origin, long bound)方法,该方法可以直接生成指定区间的随机数,写法简洁且避免手动计算的错误:
protected static long random(long a, long b) { return new Random().longs(a, b).findFirst().getAsLong(); }
如果需要兼容更低版本的Java,可以通过无参nextLong()结合取模运算实现(注意处理负数情况):
protected static long random(long a, long b) { Random random = new Random(); long range = b - a; long result = random.nextLong() % range; return a + (result < 0 ? result + range : result); }
内容的提问来源于stack exchange,提问作者sctts-lol
相关产品推荐
相关产品推荐

