繁体   English   中英

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

[英]Java: How to generate a random number bigger than x, no maximum?

我只想生成一个大于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?

感谢您抽出宝贵时间发布答案,我非常感谢。

由于信息存储在有限的字节中,因此无论如何都无法生成“无最大值”的数字。

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

例如:

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

请注意,这是排他性的,因为nextInt(int)合同指定排除上限。 并且这要求MINIMUM必须是正数。

为什么不只使用您自己的类/实用程序方法将其包装,就可以像这样说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

这样,您可以执行以下操作:

int someInt = MyMath.Random();

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

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM