javascript - 范围内的随机数,没有唯一性(宾果游戏)

标签 javascript arrays random numbers

我正在尝试创建一种宾果数字生成器,在其中生成一个唯一的数字并单独显示它。

我还希望该数字+我生成的所有下一个数字显示在一行的底部。

我的问题是,每当它遇到重复项时,它都会循环,直到找到唯一的数字,但显示该数字的次数与在底行中循环的次数相同。因此,如果我生成数字 [4, 6, 2],然后生成另一个 4,它将继续循环,直到找到数组中尚未存在的另一个数字。

如果它命中数组中的数字两次然后找到 5,则会显示为 [4, 6, 2, 5, 5, 5,]。有什么办法可以让它不显示前 2 个 5?

window.onload = startup;

function startup() {
  document.getElementById("button").onclick = newNumber1;
}

var number = 0;
var bingoNumber = [];
var i;

function newNumber1() {
  number = Math.floor((Math.random() * 9) + 1);
  clickME();
}


function clickME() {
  for (i = 0; i < bingoNumber.length; i++) {
    if (number === bingoNumber[i]) {
      newNumber1();
    }
  }
  bingoNumber.splice(0, 0, number);
  document.getElementById("display").innerHTML = bingoNumber[0];
  document.getElementById("row").innerHTML = bingoNumber;
}
<button type="button" id="button">Click</button>
<div id="display"></div>
<div id="row"></div>

最佳答案

您的 clickMe 在执行完成之前调用 newNumber1,这不是问题所在。问题是 newNumber1 调用 clickMe 的另一个实例,并且循环继续。因此,当 newNumber1 生成唯一编号时,clickMe 的当前实例和先前实例每次都会完成插入相同的新编号。

另一个问题是,即使你让这个工作正常,如果 bingoNumber 包含 newNumber1 的所有可能的唯一数字,clickMe 中的循环也会继续下去。 可以生成。

试试这个:

window.onload = startup;

var bingoNumber = []; // contains all generated numbers

function startup(){ 
    document.getElementById("button").onclick = clickMe;
}

function newNumber(){
    // generate a new number
    return Math.floor((Math.random() * 9) + 1);
}

function clickMe(){

    // if bingoNumber contains all possible values, don't run the rest
    // change this to however you want to terminate it
    if(bingoNumber.length==9){ return false; }

    var num; // number to add to the array

    // generate a new number until it is unique
    for(num=newNumber();bingoNumber.indexOf(num)>=0;num=newNumber());

    // add the unique number in the beginning of the array
    bingoNumber.unshift(num);

    // display last generated value
    document.getElementById("display").innerHTML = bingoNumber[0];

    // display all generated value
    document.getElementById("row").innerHTML = bingoNumber;
}

关于javascript - 范围内的随机数,没有唯一性(宾果游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204179/

相关文章:

javascript - 如何验证来自 socket.io 的数据包?

javascript - 我的 href 链接按钮无法联机使用

PostgreSQL - 随机主键

jquery - 随机十六进制颜色

javascript - 物体之间的碰撞问题取​​决于一个物体的速度

javascript - 使元素自动消失的 JQuery 或 Javascript

android - 如何设置 ImageView[] 数组?

C,一个数组需要的内存空间是否比它的元素更多?

javascript - 为什么函数在数组中执行但与 jquery 一起使用时不执行 'when'

Javascript函数生成具有非均匀概率的随机整数