【问题标题】:Random number generation/shuffling issue随机数生成/改组问题
【发布时间】:2018-10-11 18:56:15
【问题描述】:
好的,我正在尝试创建一个应用程序,当您单击一个按钮时,它会生成并显示 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
而不是这个:
This happens with one single click
【问题讨论】:
标签:
javascript
arrays
random
numbers
unique
【解决方案1】:
我认为您正在使一个又一个逻辑TOO与您现有的代码(如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>