您的第一个代码是正确的。
double myvalue;do { myvalue = myrandom.nextDouble() * (upper - lower) + lower; } while (myvalue == lower); // Replace != with ==只需替换
!=为
==。这不是很有效,这是不正确的。
看代码的效率。
看一下
nextDouble您的代码,您会发现它是经过计算生成的随机long值。
这意味着基本上您将有1种可能性在2 * 9,223,372,036,854,775,807(长数值范围减去1)上重复循环。
附加说明
:由于您使用
double而不是a,因此
BigDecimal您可以获得一个
myvalue接近
lower界限但小于界限的,因此最好更改代码以
排除也小于的值
lower。它不会改变代码的效率。
double myvalue;do { myvalue = myrandom.nextDouble() * (upper - lower) + lower; } while (myvalue <= lower); // Replace != with <=


