var letters = ["A", "B", "C", "D"];
var rnd = Math.random();
var rndK = letters[Math.floor(rnd*letters.length)];
return rndK;我的问题是,我已经运行了几次,它有时会输出D,但我真的不明白为什么,因为据我所知,
math.random() returns a pseudorandom number between 0 and 1 but not 1,
math.floor() returns the highest integer that's less or equal to the value, rounding down essentially.难道不应该只在rnd给出1时输出D,但由于math.floor()向下舍入,这应该是不可能的?我可能在这里遗漏了一些非常明显的东西,如果有人能为一个完全的javascript初学者解释一下,谢谢。
发布于 2021-01-14 06:30:58
你说得对,math.random()只返回0到1之间的值。将它乘以letters.length,也就是4,求底只会返回0到3之间的值,而不是4。这有时仍然会返回D,因为D的索引是3。记住,元素的索引是元素的位置减1。所以A的索引是0,B的索引是1,C的索引是2,D的索引是3。如果你不想返回D,可以用math.random()乘以letters.length - 1。
发布于 2021-01-14 06:31:38
Math.floor(rnd*letters.length)在您的情况下返回一个介于0和3之间的数字。因为letters.length === 4
letters[0] === "A"
letters[3] === "D"
因此,一切都按预期运行:)
https://stackoverflow.com/questions/65710678
复制相似问题