我遇到了一個很奇怪的問題。我試圖找到解決辦法,但徒勞無功。我的問題是我想創建一個1-45之間的隨機數,我不希望這個數字再次重複。想在1-45之間產生隨機數而不重複
-2
A
回答
4
按照定義,隨機選擇將隨機重複。
但是,您可以構建一個包含每個數字的數組,然後洗牌數組,產生數字的隨機順序沒有重複。
var nums = [], i;
for(i=1; i<=45; i++) nums.push(i);
nums.sort(function(a,b) {return Math.random()-0.5;});
alert(nums.join(","));
0
0
你真正想要的是在給定的範圍內,以創建一組數字和隨機取出一個號碼,直到設置爲空。
這裏是產生另一個功能,正是如此的函數:
function generateRandomRangeSet(beg, end) {
var numbers = []; // Create an array in range [beg, end].
for (var i=beg; i<=end; i++) { numbers.push(i); }
return function() {
if (numbers.length < 1) { throw new Error('no more numbers'); }
var i=Math.floor(Math.random()*numbers.length), number=numbers[i];
numbers.splice(i, 1); // Return and remove a random element of the array.
return number;
}
}
var r = generateRandomRangeSet(1, 45);
r(); // => 9
r(); // => 24
r(); // => 7 ... for each number [1, 45] then ...
r(); // Error: no more numbers
+0
憑藉Object.prototype中的新方法。上述代碼在IE8及以下版本中失敗。 – 2013-02-15 06:42:56
+0
@Kolink:已更新,可與任何版本的ECMAScript一起使用。 – maerics 2013-02-15 07:03:18
相關問題
- 1. 生成1到10之間的隨機數而不重複
- 2. 生成隨機數字而不重複
- 3. 隨機數發生器產生重複
- 4. 在java中不產生重複對的隨機數對
- 5. 隨機代碼種子生產重複
- 6. 在Array中生成隨機數而不重複 - JavaScript
- 7. 在兩個浮點數之間產生隨機浮點數
- 8. 隨機產生整數不重複,沒有陣列
- 9. 隨機數發生器不重複
- 10. 隨機數產生
- 11. 隨機數產生
- 12. 機器人 - 產生隨機數且無重複
- 13. 在[0,1)之間生成隨機數
- 14. vb 2010生成隨機數而不重複
- 15. TimerManager隨機重複發生時間
- 16. PHP代碼生成事件在1到20秒之間的隨機隨機重複中重複
- 17. 隨機種子來產生隨機數
- 18. 不重複的隨機數
- 19. 隨機數不重複
- 20. 隨機數字不重複
- 21. 我每次都需要重複在Sqlite中隨機重複數據android我想要重複隨機數據
- 22. 隨機化字符串而不重複
- 23. 指定隨機夥伴而不重複?
- 24. 挑選隨機座標而不重複?
- 25. 隨機圖像,而不使用重複
- 26. 隨機挑選,而不重複
- 27. 如何在SystemVerilog仿真器之間生成重複的隨機數字序列?
- 28. 產生重複結果的隨機函數
- 29. 低效代碼:防止產生重複的隨機數
- 30. 產生非重複數的隨機二維陣列,爪哇
以一個。數組,填充數字範圍,隨機數,彈出 – C5H8NNaO4 2013-02-15 06:30:16
-1的值。不費力。沒有替換的隨機抽樣並不是一個奇怪的問題,在編程的教科書中經常遇到這種問題,並且有許多語言(包括js)在線解決方案。如果你使用了「javascript random without replacement」,前三個結果是從stackoverflow,第一個是http://stackoverflow.com/questions/12987719/javascript-how-to-randomly-sample-items-without-replacement。另見http://stackoverflow.com/questions/11935175/sampling-a-random-subset-from-an-array。 – Paul 2013-02-15 06:52:32