我认为您获得8/9位数字值和负数的原因是您要添加
fraction一个
long(带符号的64位值),该值可能大于的正数
int范围(32位值)
aStart。
该值正在溢出,
randomNumber处于负32位范围内或几乎缠绕到
aStart(由于
int是带符号的32位值,您
fraction只需要稍微小于(2
^ 32-
aStart)就可以看到8或9位数字)。
您需要使用
long所有值。
private static void createRandomInteger(int aStart, long aEnd, Random aRandom){ if ( aStart > aEnd ) { throw new IllegalArgumentException("Start cannot exceed End."); } //get the range, casting to long to avoid overflow problems long range = aEnd - (long)aStart + 1; logger.info("range>>>>>>>>>>>"+range); // compute a fraction of the range, 0 <= frac < range long fraction = (long)(range * aRandom.nextDouble()); logger.info("fraction>>>>>>>>>>>>>>>>>>>>"+fraction); long randomNumber = fraction + (long)aStart; logger.info("Generated : " + randomNumber); }


