Java 脚本随机数生成器问题
Java Script Random Number Generator Issue
我有生成随机数的代码,它似乎在 1 或 2 之间来回循环。
const isDnaUnique = (_DnaList = [], _dna = []) => { let foundDna =
_DnaList.find((i) => i.join("") === _dna.join("")); return foundDna == undefined ? true : false; };
const createDna = (_races, _race) => { let randNum = [];
_races[_race].layers.forEach((layer) => {
let randElementNum = Math.floor(Math.random() * 100) + 1;
let num = 0;
layer.elements.forEach((element) => {
if (randElementNum >= 100 - element.weight) {
num = element.id;
}
});
randNum.push(num); }); return randNum; };
我的问题是随机数生成器只返回值而不是循环遍历所有值。
{
name: "Eyes",
elements: [
{
id: 0,
name: "E1",
path: `${dir}/3-eyes/E1.png`,
weight: 25,
},
{
id: 1,
name: "E2",
path: `${dir}/3-eyes/E2.png`,
weight: 25,
},
{
id: 2,
name: "E3",
path: `${dir}/3-eyes/E3.png`,
weight: 25,
},
{
id: 3,
name: "E4",
path: `${dir}/3-eyes/E4.png`,
weight: 25,
},
],
position: { x: 0, y: 0 },
size: { width: width, height: height },
},
您的结果正是我所期望的。一起来看看吧。
您的 randElementNum
将是一个从 1 到 100 的数字。您的所有四个元素的 weight
都是 25。您正在 运行 通过所有的循环每次都有元素。因此,如果数字小于 75 (100-25),则 if
语句永远不会触发,并且 num
将为 0。如果数字大于或等于 75,则 if
语句全部触发四次,您将以元素 #3 结束。没有其他可能了。
下一个大问题是“forEach”是错误的工具。我在下面向您展示了如何使其工作,但您确实应该使用老式的“for”循环,这样您就可以在找到答案后打破循环。
我不确定您尝试的效果是什么,但这肯定不是您想要的。根据名称 weight
,您是否尝试让每个元素都被选中 25% 的时间?你可以用这样的东西来做到这一点:
const createDna = () => {
let randElementNum = Math.floor(Math.random() * 100);
console.log( randElementNum );
let num = -1;
layer.elements.forEach((element) => {
if( num >= 0 )
return;
if (randElementNum < element.weight)
{
num = element.id;
return;
}
randElementNum -= element.weight;
});
return num;
};
我有生成随机数的代码,它似乎在 1 或 2 之间来回循环。
const isDnaUnique = (_DnaList = [], _dna = []) => { let foundDna =
_DnaList.find((i) => i.join("") === _dna.join("")); return foundDna == undefined ? true : false; };
const createDna = (_races, _race) => { let randNum = [];
_races[_race].layers.forEach((layer) => {
let randElementNum = Math.floor(Math.random() * 100) + 1;
let num = 0;
layer.elements.forEach((element) => {
if (randElementNum >= 100 - element.weight) {
num = element.id;
}
});
randNum.push(num); }); return randNum; };
我的问题是随机数生成器只返回值而不是循环遍历所有值。
{
name: "Eyes",
elements: [
{
id: 0,
name: "E1",
path: `${dir}/3-eyes/E1.png`,
weight: 25,
},
{
id: 1,
name: "E2",
path: `${dir}/3-eyes/E2.png`,
weight: 25,
},
{
id: 2,
name: "E3",
path: `${dir}/3-eyes/E3.png`,
weight: 25,
},
{
id: 3,
name: "E4",
path: `${dir}/3-eyes/E4.png`,
weight: 25,
},
],
position: { x: 0, y: 0 },
size: { width: width, height: height },
},
您的结果正是我所期望的。一起来看看吧。
您的 randElementNum
将是一个从 1 到 100 的数字。您的所有四个元素的 weight
都是 25。您正在 运行 通过所有的循环每次都有元素。因此,如果数字小于 75 (100-25),则 if
语句永远不会触发,并且 num
将为 0。如果数字大于或等于 75,则 if
语句全部触发四次,您将以元素 #3 结束。没有其他可能了。
下一个大问题是“forEach”是错误的工具。我在下面向您展示了如何使其工作,但您确实应该使用老式的“for”循环,这样您就可以在找到答案后打破循环。
我不确定您尝试的效果是什么,但这肯定不是您想要的。根据名称 weight
,您是否尝试让每个元素都被选中 25% 的时间?你可以用这样的东西来做到这一点:
const createDna = () => {
let randElementNum = Math.floor(Math.random() * 100);
console.log( randElementNum );
let num = -1;
layer.elements.forEach((element) => {
if( num >= 0 )
return;
if (randElementNum < element.weight)
{
num = element.id;
return;
}
randElementNum -= element.weight;
});
return num;
};