如何使用Math.random()
生成兩個隨機數?例如,我試圖從集(2,4,6,8)
中生成一個隨機數,你將如何去呢?如何在java中生成隨機數
回答
對於這個特定的設置,你可以使用
(int)(Math.random() * 4) * 2 + 2
這裏:
Math.random()
生成一個數字,是大於或等於0.0且嚴格小於1.0;(int)(... * 4)
給出一個0,1,2,3,... * 2 + 2
給出一個2,4,6,8,
你假設該集合*總是*那個特定的算術級數。 – hexafraction
@hexafraction:是的。在這個問題上,我沒有看到任何跡象表明OP在這個特定集之外。 – NPE
@hexafraction *「二進制數字」* – arshajii
int[] numSet={2,4,6,8};
Random myRand=new Random();
int myNum=numSet[myRand.nextInt(numSet.length)];
這產生數字的陣列,所述隨機對象然後從數組數組中選取一個隨機元素。這並不假定這些數字是以任何形式的數學系列。他們可能是11,25,31,876,984368,7432,84562就此而言。
請不要告訴我,有一個多項式從它的y值生成該集合。我知道。
如果該集合達到100萬,該怎麼辦?您必須將所有數字不必要地存儲在數組中。 – arshajii
@arshajii鑑於當前原始問題的模糊性,所有答案都會部分正確,部分不可行,因爲我們不知道OP的參數。 AFAICT有一個5分鐘的窗口編輯,但我不能太確定。 – hexafraction
這裏有一個小小的危險,有人會逐字複製這段代碼,並且爲每個新選擇創建一個新的Random()對象比來自同一個Random對象的連續值「隨機」要少得多。儘管如此,如果編碼人員仔細創建該對象一次,並將其重複用於多次調用或迭代(如果僅僅因爲它更可能是線程安全的),那麼它會更好。 –
將這些數字放在數組中。 使用數組長度 - 1生成一個隨機數,並將其用作隨機選擇數組元素的索引。
您也可以使用了java.util.Random類是這樣的:
int values[] = {2,4,6,8};
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(values.length);
int randomValue = values[randomInt]; /* Here's your random value from your set */
好吧,讓我們做一個真正的通用解決方案。
int lower = 2;
int upper = 8;
int step = 2;
int rand = (int)(Math.random() * (upper-lower+1));
int result = rand - rand%step + lower;
如果您想要在另一個集合內生成的數字不是您指定的數字,只需更改較低,較高和較高的變量以適應您的設置。它包括上限,如果它在集合中。
您需要該表達式中的(上 - 下+ 2)周圍的parens。此外,您可以使用(rand&-2)來執行沒有除法的(rand - rand%2)。如果你想離開該部門,你可以得到一個更一般的解決方案,任何算術級數可以用(上),(下)和(指定常見差異的(步)值來描述。 –
謝謝,相應地修復它。 – spydon
已經足夠用於upvote了。 :)我還注意到,你正確地改變了(上 - 下+ 2)到(上 - 下+ 1)以允許1的步驟。幹得好! –
我想添加一個更一般的答案。
假設在一套最小的整數A和集合的大小S.從一組隨機整數會是這樣的:
A + myRandom.nextInt(S) * 2
對於Java中的具體的例子,這將是:
Random myRandom = new Random();
int randomNum = 2 + myRandom.nextInt(4) * 2;
(幾乎)完全一般的方法並不難。
static randInt(int first, int last, int step) {
int nsteps = (last+1-first)/step;
return first + step*(int)(nsteps*Math.random());
}
返回從{start, start+step, start+2*step, ... }
至多且包括stop
,或者最後一個號碼stop
如果stop
之前不是序列的一部分的隨機整數。
int choice = randInt(2, 8, 2); /* random choice from {2, 4, 6, 8} */
...解決了示例問題。
的(幾乎)的部分是,這不處理整數溢出或參數簽名錯誤(step
爲零,step<0
當first<last
,反之亦然。)
- 1. java:在循環中生成隨機數
- 2. 在java中生成隨機數
- 3. 如何在django中生成隨機數
- 4. 如何在Haskell中隨機生成一個隨機生成的數字列表
- 5. Java中的併發隨機數生成
- 6. Java中的隨機數生成器
- 7. C與Java中的隨機數生成
- 8. 生成隨機數序列與在Java
- 9. 生成隨機數在Java BigIntegers
- 10. 在隨機生成50個隨機數中使用隨機數#
- 11. 如何在Java中生成一個隨機的9位數字?
- 12. 如何在Android Java應用程序中隨機生成數字?
- 13. 如何在java中生成隨機整數?
- 14. 如何在Java中使用ENUM生成隨機數字
- 15. 如何在java中生成100個隨機3位數字?
- 16. 如何在程序集中生成隨機數生成器?
- 17. 在Java中生成隨機對象
- 18. 生成隨機字母在Java中
- 19. 在Java中生成隨機單詞?
- 20. 生成幾何隨機數
- 21. 隨機數生成
- 22. 生成隨機數
- 23. 生成隨機數
- 24. 生成隨機數
- 25. 生成隨機數
- 26. 隨機數生成
- 27. 如何在Go中生成隨機uint64?
- 28. 如何在android中隨機生成BigInteger.probablePrime?
- 29. Python中生成隨機數
- 30. 在Laravel生成隨機數
所以,你不是說「產生'一個隨機數?你只是想從數組中選擇一個隨機索引? – Rohan