Java:如何生成一个大于x的随机数,没有最大值?

时间:2017-07-03 12:32:35

标签: java math random

我只想生成一个大于x的随机数,没有最大值,然后用它来操作。我一直在寻找我的问题的答案,但它们都不符合我的问题:它们指的是具有最小值和最大值的限制。我想要一个简单的代码,如:

Random number = new Random();
int x = 0; //the minimum value
int finalNumber;//any positive random number, in this case; if, for example, x were 2, some number bigger than 2.

我如何获得finalNumber?

感谢您抽出时间发布答案,我真的很感激。

3 个答案:

答案 0 :(得分:5)

由于信息存储在有限字节中,因此无论如何都不能生成一个带有"没有最大值的数字"

假设您将其限制为Integer.MAX_VALUE,那么您可以在[0, Integer.MAX_VALUE - minimum]中生成一个数字,然后在结果中添加最小值。

例如:

final int MINIMUM = ...
int v = random.nextInt(Integer.MAX_VALUE - MINIMUM) + MINIMUM;

请注意,这是独占的,因为nextInt(int)合同指定排除上限。而这需要MINIMUM为正。

答案 1 :(得分:0)

为什么不用你自己的类/实用程序方法将它包装起来,像这样的方法说MyMath.Random():

public class MyMath{
   public static int Random()
   {
      final int MIN = 0;
      final int MAX = Integer.MAX_VALUE;
      return (int)(Math.random() * MAX);
   }
   /// overload so you can specify min value
   public static int Random(in MIN)
   {
      final int MAX = Integer.MAX_VALUE;
      return (int)(Math.random() * (MAX-MIN));
   }
}

您可以参考Java文档中的Integer.MAX_VALUE here

这样你就可以:

int someInt = MyMath.Random();

int x = 123; int someInt = MyMath.Random(x);

答案 2 :(得分:0)

试试这个:

if (x > 0) { return (int)(Math.random() * (Integer.MAX_VALUE - x)) + x; }