Java中使用随机运算符创建最小值

Java中使用随机运算符创建最小值,java,algorithm,random,Java,Algorithm,Random,我需要生成一个介于最小值和1->[min,1]之间的随机数 我一直在阅读java的random类,发现当生成一个随机双精度时,结果是一个从0到1.0的双精度,但是,不能限制界限 我最初的想法是将随机函数的最大值限制为.7,但这在随机函数中是不可能的 如果有人能帮我,这是我的代码: public static double random(){ // generate an random number accuracy within range [min, 1) Ra

我需要生成一个介于最小值和1->[min,1]之间的随机数

我一直在阅读java的random类,发现当生成一个随机双精度时,结果是一个从0到1.0的双精度,但是,不能限制界限

我最初的想法是将随机函数的最大值限制为.7,但这在随机函数中是不可能的

如果有人能帮我,这是我的代码:

public static double random(){
        // generate an random number accuracy within range [min, 1)
        Random randomNum = new Random();
        double accuracy = min + randomNum.nextDouble();
        System.out.println("Min " + min);
        return accuracy;
    }

例如,在这种情况下,如果我们将min设为.2,那么我所理解的函数的可能结果是.2到1.2。我如何简单地将其设为.2到1?

如果我错了,请纠正我,但这行得通吗:

 /**
  * A double uniformly distributed in the range [min, max).
  * @param min finite and inclusive.
  * @param max finite, > min, and exclusive.
  * @return d such that min <= d && d < max.
  */
 public static boolean uniformInRange(double min, double max, Random r) {
   assert min < max && !Double.isInfinite(min) && !Double.isInfinite(max);
   return min + (r.nextDouble() * (max - min));
 }
public static double random(int min, int max){
    Random randomNum = new Random();
    return (max - min) * randomNum.nextDouble() + min;
}
说明:

  • (max-min)
    返回
    max
    min
    之间的差值
  • randomNum.nextDouble()
    返回介于
    0
    1
  • +min
    将添加
    min
    值,因此它是最低值

  • (max-min)*randomNum.nextDouble()
    返回介于
    0
    max-min

  • (max-min)*randomNum.nextDouble()+min
    返回介于
    min
    max
    之间的随机数

如果我错了,请纠正我,但这行得通吗:

public static double random(int min, int max){
    Random randomNum = new Random();
    return (max - min) * randomNum.nextDouble() + min;
}
说明:

  • (max-min)
    返回
    max
    min
    之间的差值
  • randomNum.nextDouble()
    返回介于
    0
    1
  • +min
    将添加
    min
    值,因此它是最低值

  • (max-min)*randomNum.nextDouble()
    返回介于
    0
    max-min

  • (max-min)*randomNum.nextDouble()+min
    返回介于
    min
    max
    之间的随机数

    • 像这样的东西怎么样

      double min = .2;
      Random gen = new Random();
      double rand = (gen.nextDouble() * 0.8) + min;
      

      在这里,您将在末尾添加最小界限,并将您的0-1比率乘以0.8,这是0.2和1之间的差值。

      类似的情况如何

      double min = .2;
      Random gen = new Random();
      double rand = (gen.nextDouble() * 0.8) + min;
      

      在这里,您将在末尾添加最小界限,并将您的0-1比率乘以0.8,这是0.2和1之间的差值。

      前面的名称更清楚,imho,
      uniformInRange
      没有说它是随机的。(ps:您将进行多少次编辑,我已经计算了10:p)@WoLpH,我认为签名中的
      Random
      清楚地表明这是一个随机数,除非你深入研究Javadoc,否则“uniform”一词就不存在了。在编辑时,是的,我非常不擅长看我的代码,然后注意到还有一件事需要调整:)@WoLpH它实际上没有说任何东西,“uniform”对于任何接受过统计的人来说,这应该是一个很好的指标,特别是在随机数的情况下。(例如,由包含的包/类名指示。或者由正在回答的问题指示。)@millimoose:你说的“统一”是对的在本文中非常清楚,但当我在自动完成列表中查找
      random
      函数时,我会首先键入
      random
      ;)@WoLpH,我认为我们在讨论API设计时忽略了一个部分:它出现的类。如果您在
      random
      类或子类中工作,则前缀“random”将不会显示任何方法,但类名将提供缺少的上下文。如果我要构建一个完整的库,我将尝试使用可搜索的类名,同时尽量避免使用“random”之类的词,这可能导致对“pseudo-random”与“true-random”的错误假设。前面的名字更清楚了,伊姆豪,
      uniformInRange
      没有说它是随机的。(ps:你要做多少次编辑,我已经数了10次了:P)@WoLpH,我想签名中的
      random
      清楚地表明这是一个随机数,还有“uniform”这个词在编辑方面,是的,我非常不擅长看我的代码,然后注意到还有一件事需要调整:)@WoLpH It's实际上什么都没有说,“uniform”应该是任何接受统计的人的一个好指标,特别是在随机数的情况下。(例如,由包含的包/类名指示。或者由正在回答的问题指示。)@millimoose:你是对的,在这个上下文中“统一”是非常清楚的,但是当我只是在自动完成列表中查找
      random
      函数时,我会先键入
      random
      ;)@WoLpH,我认为我们在讨论API设计时忽略了一个部分:它出现的类。如果您在
      Random
      类或子类中工作,那么前缀“Random”将不会出现任何方法,但类名将提供缺少的上下文。如果我要构建一个完整的库,我会尝试使用可搜索的类名,同时尽量避免使用“random”之类的词,这可能会导致对“pseudo-random”与“true-random”的错误假设。