@kk85819 @jo_pellet @nikezhang 我来解释这个随机数把,我根据楼主的图搜到了原地址
https://www.random-online.com/
然后看了下源代码,只贴几个重要的:
function random_number(min, max) {
var rand = parseInt(Math.random() * (max - min + 1) + min);
return rand;
}
function play() {
clearInterval(timer);
timer = setInterval(function() {
start.style.display = "none";
stop.style.display = "block";
var x = document.getElementById("min").value;
var y = document.getElementById("max").value;
var shu = document.getElementById("shumu").value;
var only = document.getElementById("only").value;
var data = [];
for (var i = 0; i < 10000; i++) {
if (data.length >= shu) {
break;
}
var rand = random_number(x, y);
if (only == 1) {
if (!array_contain(data, rand)) {
data.push(rand + " ")
}
} else {
data.push(rand + " ")
}
}
container.innerText = data.join(" ");
start.classList.remove("btn-success");
start.classList.add("btn-primary");
stop.classList.add("btn-danger");
}, 100);
}
P9自动把缩进弄没了,有兴趣的自己用编辑器之类的格式化一下代码。
可以看出 play 函数传给 random_number 的最大值最小值,其实是两个字符串。
而 javascript 里是有默认类型转换的,比如两个数字值的字符串相减,结果是正常的。但也不是绝对,如果是数字和字符串相加,结果会拼接起来。
比如楼主这最小值 1,最大值 135,传到 random_number 里面结果就是
parseInt(Math.random() * (max - min + 1) + min)
即
parseInt(Math.random() * ("135" - "1" + 1) + "1")
即
parseInt(Math.random() * (134 + 1) + "1")
即
parseInt(Math.random() * 135 + "1")
如果 Math.random() * 135 小于 1 的时候,比如 0.123,则结果就变成了
parseInt(0.123 + "1")
即
parseInt("0.1231")
等于0。
按照正常的逻辑,即传入的min, max都从字符串转成了数字之后,这个结果确实都要增加 min ,也就是提议所有数字 + 1的人是正确的。
不知道这么垃圾的程序猿做的网站是怎么有脸只做随机数,而且怎么弄成权重这么高的。