我试图从数组中获取一个随机数而不重复但使用var newx = Math.floor(Math.random()* array.length);是随机的,但它按长度而不是数组内的内容,所以它往往会重复。
<html>
<head>
</head>
<!-- <body> -->
<button onclick="myFunction()">Difficulty</button>
<p id="demo">here</p>
<p id="test"></p>
<script>
function myFunction() {
function shuffle(o){ //try this shuffle function
for(var j, g, t = o.length; t; j = Math.floor(Math.random() * t), g = o[--t], o[t] = o[j], o[j] = g);
return o;
};
var i; var l; var y; var n;
var newx; var newy;
var useranswer; var amountX; var largest;
var copyAmountX;
var mixAlot;
var x = parseInt(prompt("What is the first number?"+" "+"(up to 12)"));
if (x < 13) {
y = prompt("what is the second number?"+" "+"(choose up to 12)");
n = prompt("how many problems to be solved?");
amountX = []
// adds to an array equal to x (user input)
if (!amountX.length) {
for (var s = 0; s <= x; s++) {
amountX.push(s);
}
};
// just to let me know if it is working. Will be taken out.
alert(amountX);
largest = Math.max.apply(Math, amountX);
alert(largest);
alert(isNaN(x));
}
else {
alert("Refresh page and restart with numbers under 12")
};
if (y > 12 == true) {
alert("Refresh page and restart with numbers under 12")
};
i = 0;
l = amountX.length;
copyAmountX = amountX;
// where the core magic of everything happens.
while (x < 13 && y < 13 && i<n) {
newx = shuffle(copyAmountX);
newy = Math.floor(Math.random() * y);
useranswer = prompt("Multiply "+newx+" by "+newy)
if (useranswer == newx * newy) {
alert("Correct! problem "+(i+1)+" of "+n);
};
if (amountX == 0) {alert("You have completed your Difficulty! Good Game"); n = 0;
};
i++;
};
};
</script>
</body>
</html>
答案 0 :(得分:4)
如果你想从数组中获取随机数,那么我会推荐一种不同的方法:复制数组,然后随机播放副本。
function shuffle(o){ //try this shuffle function
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
这样,您可以保持从混洗数组中弹出元素;它们总是随机的,只会发生一次。
现在关于你的代码,我担心它有很多错误:...我删除了这部分
<强>修正:强>
我纠正了你的程序,它现在运行得很好。请仔细检查并应用我在javascript中评论的更改。 Link