2017-07-03 154 views
0

我只是想生成一個大於x的隨機數,沒有最大值,以後再操作。我一直在尋找我的問題的答案,但沒有一個符合我的問題:他們引用最小值和最大值的限制。我想要一個簡單的代碼就像:Java:如何生成一個大於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. 

我怎樣才能得到最終號碼?

感謝您花時間發佈答案,我真的很感激。

+3

由於'finalNumber'是一個'int'有其是'Integer.MAX_VALUE'(2,147,483,647)的固有最大數量。 – Jesper

+1

x和無窮之間的隨機數必須平均到無窮大的無窮大。事實上,你有0的概率來得到一個與這些邊界無關的數字。 – Deltharis

+0

考慮到有多少個數在2以上,你可以用99.999999 ....%確定性得到一個大於宇宙原子數的數字;) – marstran

回答

5

由於信息存儲在有限字節中,因此不能在任何情況下生成「無最大值」的數字。

因此,假設您的限制Integer.MAX_VALUE那麼您可以在[0, Integer.MAX_VALUE - minimum]中生成一個數字,然後將最小值添加到結果中。

如:

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

記住,這是因爲專屬合約nextInt(int)指定上限被排除在外。而這需要MINIMUM纔是正面的。

+4

也許值得指出的是,這是有效的,因爲MINIMUM是正數 - 否則你冒險溢出。 – assylias

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);

+0

如果MIN是一個整型,MAX是Integer.MAX_VALUE比沒有物理方式MIN <= MAX可以返回false。此外,使用常量而不是複製它的值,並在評論中提到它來自哪裏。 – Deltharis

+0

感謝@Deltharis,它只是讓我能夠指定除Integer常量以外的最大值的代碼。但爲了與問題保持一致,我更新了使用Integer常量的答案。 – Qiqo

0

嘗試這種情況:

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

相關問題