2017-06-23 67 views
-4

如何在以下條件下創建要在java腳本數組中分配的隨機數。Java腳本隨機數,允許爲2個重複值

  • 需要用(1-28)創建隨機數。
  • 允許重複2次。 (例如:1,3,5,4,5)。 。
+0

多少隨機你需要在數組中創建的數字? – VenkyDhana

+0

你有沒有嘗試過或者你只是想讓別人爲你寫代碼?只是提示:第1步:查找如何在一個範圍內生成一個隨機數:https://stackoverflow.com/questions/1527803/generating-random-whole-numbers-in-javascript-in-a-specific-range ;步驟2:將先前生成的數字存儲在數組中,並在每次添加之前檢查兩次。 –

+0

我需要在數組中創建28個隨機數 – Vinoth

回答

0

添加一個數字,根據您的標準數組簡單的解決方案:

function addNumberToArray(arr){ 
    const minValue = 1; 
    const maxValue = 28; 
    if(arr.length==maxValue*2){ //no possible numbers left 
     return; 
    } 
    function getRandomArbitrary(min, max) { 
     return Math.floor(Math.random() * (max - min) + min); 
    } 
    function isValueInArrayLessThenTwoTimes(value, arr){ 
     var occurrences = 0; 
     for(var i=0; i<arr.length; i++){ 
      if(arr[i]===value){ 
       occurrences++; 
      } 
     } 
     return occurrences<2; 
    } 
    var newValue; 
    do { 
     newValue = getRandomArbitrary(minValue,maxValue); 
    } while(!isValueInArrayLessThenTwoTimes(newValue, arr)); 
    arr.push(newValue); 
} 
0
var array = []; 

for (var i = 0; i < 28; i++) { 
    var randomNumberBetween1and28 = Math.floor(Math.random() * (28 - 1) + 1); 
    while (getCount(array, randomNumberBetween1and28) > 2) { 
     randomNumberBetween1and28 = Math.floor(Math.random() * (28 - 1) + 1); 
    } 
    array.push(randomNumberBetween1and28); 
} 

function getCount(arr, value) { 
    var count = 1; 
    for (var i = 0; i < arr.length; i++) { 
     if (value == arr[i]) count++; 
    } 
    return count; 
} 
+0

這很好。但是它允許在兩次以上的重複值。 (EX:6,11,7,6,22,19,25,1,3,13,19,26,27,18,7,24,6,25,5,23,27,24,2,1 ,2,2,23,17)。這個例子「6」已經三次返回,但我只需要兩次。 – Vinoth

+0

@ R.vinoth我修改了。你現在可以試試嗎? – VenkyDhana

+0

謝謝@VenkyDhana。它正在工作...... – Vinoth

0

更短,更快的解決方案:

min=1; 
max=28; 
nums= new Array(); 
for(i=1;nums.length<28;i++){ 
    a = Math.round(Math.random()*(max-min+1)+min); 
    if(nums.indexOf(a)==-1 || nums.indexOf(a)==nums.length-nums.reverse().indexOf(a)-1){ 
    if(nums.indexOf(a)>-1){ 
     nums.reverse(); 
    } 
    nums.push(a); 
    } 
} 
console.log(nums); 

https://jsfiddle.net/znge41fn/1/