【问题标题】:non-repetitive random number picker非重复随机数选择器
【发布时间】:2017-10-25 20:58:18
【问题描述】:

我正在尝试创建一个非重复的随机数选择器,谁能指出它出了什么问题?谢谢

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;
     }
  }
}

【问题讨论】:

    标签: javascript arrays loops random


    【解决方案1】:

    改成:

    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方法被定义为检查一个元素是否存在于数组中或字符是否存在于字符串中。在您的代码中,您已经遍历了数组中的每个元素,然后使用了 include 方法。

    【讨论】:

    • 再次检查,它确实有效。我在这之间做了一些改变。您可能检查过旧代码。
    【解决方案2】:

    您可以使用检查,如果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 = [];
    &lt;input type="text" id="min" placeholder="min"&gt; &lt;input type="text" id="max" placeholder="max"&gt; &lt;button onclick="pickRandom()"&gt;Generate Random Number&lt;/button&gt; &lt;input type="text" id="result" placeholder="random number"&gt;

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 2011-11-24
      • 2011-07-19
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多