【问题标题】:Random number generation/shuffling issue随机数生成/改组问题
【发布时间】:2018-10-11 18:56:15
【问题描述】:

好的,我正在尝试创建一个应用程序,当您单击一个按钮时,它会生成并显示 1 到 76 之间的唯一数字的串联序列。我让它随机生成 1 -78,没有欺骗,但我不确定至于我将如何制作它,所以在显示它时,它会显示 1 个数字,然后每次单击都会增加 +1。

所以首先点击 [28] 第二次单击 [28, 33] 等等,没有重复。这是我到目前为止的代码

window.onload = onclick;

function onclick() {
    document.getElementById("BtnCall").onmousedown = GenNumber;
}


function GenNumber() {
    var num = LoadNumbers(1, 76);
    num = shufflearray(num);
    for (i = 0; i < 1; i++) {
        ShowArray(num);
    }
};


function LoadNumbers(min, max) {
    var arr = [];
    for (var i = min; i <= max; i++) {
        arr.push(i);
    }
    return arr;
}

function shufflearray(input) {
    var out = [];
    while (input.length > 0) { 
        var i = Math.random() * input.length;
        var a = input.splice(i, 1);
        out.push(a);
    }

    return out;
}

function ShowArray(m) {

    for (var i = 0; i < m.length; i++) {
		document.getElementById("usednum").innerHTML += (m[i]+', ');
    }
}

感谢任何支持/帮助:)

需要表现/像这样 https://gyazo.com/bebb7c58c402934050be8bc9be29e183

而不是这个: This happens with one single click

【问题讨论】:

  • 生成没有重复的随机数称为shuffle。规范算法是Fisher-Yates

标签: javascript arrays random numbers unique


【解决方案1】:

我认为您正在使一个又一个逻辑TOO与您现有的代码(如GenNumber()LoadNumbers()shufflearray() 方法)复杂化。我只是发布了一个示例答案,它将按照“需要表现得像这样”(如果我是你,那么我会尝试这种方式)来满足你想要做的事情. 顺便说一句,我还发布了您现有代码的答案。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
  <title>Generate Random Number</title>
</head>

<body>

  <p id="show_random"></p>
  <script type="text/javascript">
    var randoms = [];

    function makeid() {
      var randomnumber = Math.ceil(Math.random() * 76);
      randoms.push(randomnumber);
      //console.log(randoms);
      document.getElementById('show_random').innerHTML = randoms.join(' ');
    }
  </script>
  <input type="button" style="font-size:9pt" value="Gen Random" onclick="makeid()">
  </input>
  </form>
</body>

</html>

通过您的代码查看

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Generate Random Number</title>
</head>
<body>

<p id="usednum"></p>
<script type="text/javascript">
   
window.onload = onclick;

function onclick() {
    document.getElementById("BtnCall").onmousedown = GenNumber;
}


function GenNumber() {
    var num = LoadNumbers(1, 76);
    num = shufflearray(num);
    var single = Math.ceil(Math.random() * num.length);
    ShowArray(single); //with you existing code you're passing whole array
};


function LoadNumbers(min, max) {
    var arr = [];
    for (var i = min; i <= max; i++) {
        arr.push(i);
    }
    return arr;
}

function shufflearray(input) {
    var out = [];
    while (input.length > 0) { 
        var i = Math.random() * input.length;
        var a = input.splice(i, 1);
        out.push(a);
    }

    return out;
}

function ShowArray(m) {
   document.getElementById("usednum").innerHTML += (m + ', ');
}


</script>
<input type="button" style="font-size:9pt" value="Gen Random" id="BtnCall">
</input>
</form>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2016-05-26
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多