Проблема генерации случайных чисел / перемешивания - PullRequest
0 голосов
/ 01 мая 2018

Хорошо, я пытаюсь создать приложение, в котором при нажатии на кнопку оно генерирует и отображает каскадную последовательность уникальных чисел от 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

вместо этого: Это происходит одним щелчком мыши

1 Ответ

0 голосов
/ 01 мая 2018

Я думаю, что вы делаете конкатенацию случайных чисел одну за другой, логика СЛИШКОМ усложняется существующим кодом, таким как 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>
...