范围内的随机数,没有唯一标记(宾果游戏)

时间:2017-11-09 14:19:51

标签: javascript arrays random numbers

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

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

我的问题是,无论什么时候它复制它都会循环,直到它找到一个唯一的数字,但显示该数字的次数与它在底行中的循环次数相同。因此,如果我生成数字[4,6,2]然后再生成4,它将保持循环,直到找到另一个数字尚未在数组中。

如果它击中阵列中的数字2次然后找到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>

3 个答案:

答案 0 :(得分:1)

$('.break-after').after('<div class="page-break-clear"></div><div class="page-break">&nbsp;</div>'); 在完成执行前调用clickMe,这不是问题所在。问题是newNumber1调用newNumber1的另一个实例,循环继续。因此,当clickMe生成唯一编号时,newNumber1的当前和先前实例每次都会插入相同的新编号。

另一个问题是,即使您正常工作,如果clickMe包含clickMe可以生成的所有可能唯一编号,bingoNumber中的循环也会继续。

试试这个:

newNumber1

答案 1 :(得分:0)

不要将数字添加到数组并显示内容,直到找到唯一的数字:

var found;

function clickME() {

    found = true;
    for (i=0; i < bingoNumber.length; i++) {
        if (number === bingoNumber[i]){ 
            newNumber1();   
            found = false;
        }
    }
    if(found) {
        bingoNumber.splice(0, 0, number);
        document.getElementById("display").innerHTML = bingoNumber[0];
        document.getElementById("row").innerHTML = bingoNumber;
    }
}

答案 2 :(得分:0)

这将为您提供所有数字,而不会耗尽堆栈空间。最后有一个警告让您知道所有号码都已被调用,并且还会隐藏按钮,因此您无法再次单击它。那个你不需要......但为什么不呢?

window.onload = startup;

var bingoNumber = [];

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

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


function clickME(num) {  
    if(bingoNumber.length < 9){
        if (bingoNumber.indexOf(num) !== -1){ 
            newNumber1();   
        }else{
            bingoNumber.splice(0, 0, num);
            document.getElementById("display").innerHTML = bingoNumber[0];
            document.getElementById("row").innerHTML = bingoNumber;
        }
    }else{
        alert("All numbers have been picked");
        document.getElementById("button").style.visibility = "hidden";
    }
}