2017-05-25 60 views
0

我想創建一個非重複性的隨機數字選取器,任何人都可以指出它出了什麼問題嗎?感謝非重複性隨機數字選取器

var resultArray = []; 

function pickRandom(){ 
    var min = parseInt(document.getElementById("min").value); 
    var max = parseInt(document.getElementById("max").value); 
    var result = Math.floor((Math.random() * max) + min); 

    resultArray.push(result); 

    for (var i = 0; i < resultArray.length; i++){ 
    if(resultArray[i].includes(result)) 
    { 
     pickRandom(); 
    } else { 
     document.getElementById("result").value = result; 
    } 
    } 
} 

回答

3

將其更改爲:

var resultArray = []; 
function pickRandom(){ 
    var min = parseInt(document.getElementById("min").value); 
    var max = parseInt(document.getElementById("max").value); 
    var result = Math.floor((Math.random() * max) + min); 
    if(resultArray.includes(result)) 
    { 
    pickRandom(); 
    } else { 
    resultArray.push(result); 
    document.getElementById("result").value = result; 
    } 
} 

有2個問題與您的代碼:
1.首先推動了新的元素的數組,然後檢查是否有數組中,所以它總是返回true。這會導致無限循環。
2. includes方法被定義爲檢查數組中是否存在某個元素,或者字符串中是否存在字符。在你的代碼中,你已經迭代了數組中的每個元素,然後使用包含方法。

+0

感謝,但它仍然無法正常工作 –

+0

http://codepen.io/quanahquan/pen/LyaORY再次 –

+0

檢查,它的工作。我在兩者之間做了一些改變。您可能檢查過舊的代碼。 – Sajin

1

如果resultArray的長度等於可能的數字並退出循環,則可以使用檢查。

function pickRandom() { 
 
    var min = +parseInt(document.getElementById("min").value), 
 
     max = +parseInt(document.getElementById("max").value), 
 
     result = Math.floor((Math.random() * (max - min + 1)) + min); 
 

 
    if (resultArray.length === max - min + 1) { 
 
     document.getElementById("result").value = 'no more available'; 
 
     return; 
 
    } 
 
    if (resultArray.includes(result)) { 
 
     pickRandom(); 
 
    } else { 
 
     resultArray.push(result); 
 
     document.getElementById("result").value = result; 
 
    } 
 
} 
 

 
var resultArray = [];
<input type="text" id="min" placeholder="min"> <input type="text" id="max" placeholder="max"> <button onclick="pickRandom()">Generate Random Number</button> <input type="text" id="result" placeholder="random number">