gpt4 book ai didi

javascript - 如何使用 javascript 从一组 100 个中生成 10 个唯一的随机数?

转载 作者:行者123 更新时间:2023-11-30 16:23:43 25 4
gpt4 key购买 nike

我正在开发一个扫雷网络应用程序,我正在尝试生成 10 个具有唯一位置 ID (1-100) 的地雷。我编写了一个函数来执行此操作,并将 10 个数字记录到一个名为 numbers 的数组中。但每次我运行程序时,它都会生成 10 个相同的数字,从 1 到 100。有谁知道我做错了什么? (更新:当我将循环从 while 更改为 do...while 时它起作用了,但现在的问题是为什么要修复它?)

这是我的 jQuery 代码:

var chooseMines = function(num) {
var temp,bool,numbers = [];
for(i = 1; i <= 10; i++) {
do
{
bool = 0;
temp = Math.floor(100 * Math.random()) + 1;
for(j = 0; j < numbers.length; j++) {
if(numbers[j] === temp)
{
bool = 1;
}
}
} while(bool)
numbers.push(temp);
}
window.confirm(numbers);
return numbers;
};

这是我的旧js:

var chooseMines = function(num) {
var temp,bool = 1,numbers = [];
for(i = 1; i <= 10; i++) {
while(bool)
{
bool = 0;
temp = Math.floor(100 * Math.random) + 1;
for(j = 0; j < numbers.length; j++) {
if(numbers[j] === temp)
{
bool = 1;
}
}
}
numbers.push(temp);
}
window.confirm(numbers);
return numbers;
};

最佳答案

对于更新的问题,您不断得到相同数字的原因是因为您第一次运行它时设置了 bool0 .然后你设置temp到一个随机数。这一切都很好,直到你到达内部 for环形。自 j = 0 起,它会跳过 for 循环, numbers.length等于0 , 和 j < numbers.lengthfalse .这意味着 bool仍设置为 0while循环结束。这会阻止它再次运行。但是外面for循环仍然运行 9 次,推送 temp (这已经是一个设定的数字)到 numbers大批。此外,您在 Math.random 上没有括号.

更新后的版本有效,因为每次你做主for循环,代码将执行 do..while 中的代码至少循环一次。第一次它不做内部 for循环,但其他 9 次 j小于 numbers.length所以它有效。

此代码也有效并阻止您需要 bool变量:

var chooseMines = function(num) {
var num = num || 100;
var currentNum = 0;
var mines = [];
for (var i = 0; i < 10; i++) {
do {
currentNum = Math.ceil(Math.random() * num);
} while(mines.includes(currentNum))
mines.push(currentNum);
}
return mines;
}

您可以设置 num变量与否。默认为 100。

关于javascript - 如何使用 javascript 从一组 100 个中生成 10 个唯一的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com