2017-06-23 90 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/