Javascript 范围内无唯一性的随机数(宾果)
我正在尝试创建一种宾果数字生成器,在其中生成一个唯一的数字并单独显示 我还希望该数字+我生成的所有下一个数字显示在一行的底部 我这里的问题是,每当它碰到一个重复的数字时,它就会循环,直到它找到一个唯一的数字,但显示该数字的次数与它在最下面一行循环的次数相同。因此,如果我生成数字[4,6,2],然后再生成另一个4,它将继续循环,直到找到另一个不在数组中的数字 如果它命中数组中的数字2次,然后找到一个5,它将显示为[4,6,2,5,5,5,]。我能做些什么不让它显示前25个吗 window.onload=启动; 功能启动{ document.getElementByIdbutton.onclick=newNumber1; } var数=0; var bingoNumber=[]; var i; 函数newNumber1{ 数字=Math.floorMath.random*9+1; 点击我; } 函数clickME{ 对于i=0;iJavascript 范围内无唯一性的随机数(宾果),javascript,arrays,random,numbers,Javascript,Arrays,Random,Numbers,我正在尝试创建一种宾果数字生成器,在其中生成一个唯一的数字并单独显示 我还希望该数字+我生成的所有下一个数字显示在一行的底部 我这里的问题是,每当它碰到一个重复的数字时,它就会循环,直到它找到一个唯一的数字,但显示该数字的次数与它在最下面一行循环的次数相同。因此,如果我生成数字[4,6,2],然后再生成另一个4,它将继续循环,直到找到另一个不在数组中的数字 如果它命中数组中的数字2次,然后找到一个5,它将显示为[4,6,2,5,5,5,]。我能做些什么不让它显示前25个吗 window.onl
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;
}
}
这将为您提供所有数字,而不会耗尽堆栈空间。结尾处有一个警报,让您知道所有号码都已拨打,并且还将隐藏按钮,以便您不能再次单击它。那个你不需要的…但为什么不呢
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";
}
}
您的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;
}
Java不是JavaScript-只使用与您的问题真正相关的标记。如果bingoNumber.indexOfnumber===-1{不在数组中…}或者如果bingoNumber.indexOfnumber=-1{在数组中…}用所有可能的数字填充数组。创建空数组,例如bingoNumber,选择有效索引。将元素从大数组移动到bingoNumber,在大索引处拼接元素并重复。因此,如果在长度循环结束时未找到唯一的数字,则必须再次单击?不,每次它生成一个新数字时,循环都会重新开始。但是,每次循环且未找到数字时,您都会开始一个新循环。这将失去控制与一个大的随机集。每个匹配的数字都有自己的循环。