我正在尝试创建一种宾果号码生成器,我生成一个唯一的号码并单独显示它。
我也希望这个数字+我生成的所有下一个数字都显示在一行的底部。
我的问题是,无论什么时候它复制它都会循环,直到它找到一个唯一的数字,但显示该数字的次数与它在底行中的循环次数相同。因此,如果我生成数字[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>
答案 0 :(得分:1)
$('.break-after').after('<div class="page-break-clear"></div><div class="page-break"> </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";
}
}