簡體   English   中英

Javascript隨機最小值最大值無效

[英]Javascript random min max doesn't work

我正在嘗試為台式游戲制作一個簡單的程序來計算損害。 所以我想使用兩個整數之間的隨機數和幾個百分比的東西來計算損害。

問題是隨機對我不起作用。 我設置為min或max的數字都沒有關系,它總是從0到max之前的數字開始。

<script>
function showDiv() {
var armor = document.getElementById('armortype').value;
var damage = document.getElementById('dmgtype').value;
var min = document.getElementById('mindmg').value;
var max = document.getElementById('maxdmg').value;

document.getElementById('result').style.display = "block";
for (var i=0;i<100;i++)
{ 
var dmg_done = Math.floor(Math.random()*max+min+1);
document.getElementById('test').innerHTML += " " + dmg_done;
}

}
</script>

因此,對於min = 3,max = 6,我得到以下100個數字:

3 1 2 2 0 2 2 1 2 2 3 3 4 0 1 1 2 2 5 2 3 5 3 3 3 4 0 0 5 2 3 0 4 0 2 1 0 5 4 1 0 5 5 4 2 1 2 4 5 1 5 1 0 4 3 5 2 1 4 3 1 1 5 1 4 2 1 0 3 3 3 4 4 4 5 4 2 0 2 4 5 0 3 1 2 5 0 1 5 1 2 2 1 4 0 0 0 1 4 2

因此,min為3無關緊要,它從0開始隨機分配,結果中甚至沒有單個6。

嘗試將Math.floor(Math.random()*max+min+1)替換為Math.floor(Math.random() * (max - min + 1) + min)

那為什么不嘗試像這樣計算隨機

function getRandom (min, max) {
    return Math.random() * (max - min + 1) + min;
}

編輯:添加到評論

var valOne = $("#input-1").val(),
     valTwo = $("#input-2").val();

$("#button").click(function() {
    $("#answer-input").val(getRandom(parseInt(valOne), parseInt(valTwo)));
);

嘗試

Math.floor((Math.random() * (max+1-min))+min);

max + 1-這樣就包括最大值,而+ min這樣就尊重了最小值

測試用例

var max = 6;
var min = 3;

var result = "";
for(var i=0;i<100;i++)
{
result += Math.floor((Math.random()*(max+1-min))+min) +",";

}
console.log(result);

結果(5次)3,4,5,6,6,4,5,6,3,5,5,3,5,5,6,6,5,4,5,5,4,5,6 ,6,6,5,6,3,4,3,5,3,6,6,6,3,6,3,5,6,5,4,6,6,6,5,5,4 ,3,5,6,6,3,6,6,3,6,5,6,5,6,5,3,3,5,6,6,4,5,5,4,3,5 ,4,4,4,3,5,4,5,5,3,3,4,4,6,3,3,3,4,4,4,3,6,3,4,4,3,3 ,4,6,

6,5,4,3,6,4,4,6,4,4,5,5,3,4,6,4,4,3,4,6,6,5,3,6,4, 5,4,6,5,4,4,3,5,6,4,3,5,5,3,5,4,3,6,4,3,3,3,4,6,5, 6,3,5,5,6,6,6,5,5,6,5,6,5,4,5,4,4,5,3,6,3,3,6,5,6, 3,5,3,6,3,5,6,3,4,5,4,3,5,3,5,3,5,3,5,3,5,3,5,5,6,

3,3,6,5,5,3,3,4,3,5,6,4,3,3,6,3,6,6,3,4,5,5,5,4,4, 6,6,3,3,3,5,4,4,3,6,6,5,5,5,4,4,4,5,3,6,3,5,4,5,6, 3,6,5,3,3,4,5,4,6,3,4,6,3,6,3,4,6,5,3,6,3,5,6,5,6, 4,5,4,3,6,4,4,3,4,6,3,5,5,3,6,6,6,5,6,6,4,3,6,3,4,

4,4,3,6,4,6,4,3,5,4,5,3,4,5,6,6,6,3,4,4,4,4,4,4,4,5, 6,4,4,6,6,5,5,5,3,6,3,5,4,6,5,5,4,5,4,5,4,3,3,5,4, 6,5,5,4,4,6,6,6,3,4,6,6,3,6,5,5,4,6,6,4,3,4,6,3,5, 6,4,3,5,6,3,4,3,6,6,6,6,3,3,4,4,4,6,6,4,3,6,5,4,3,

4,5,3,6,3,4,5,4,4,5,5,3,3,6,6,4,6,4,5,5,3,5,5,5,3, 6,3,5,4,5,5,6,6,4,4,5,3,3,4,5,5,5,4,6,5,4,5,4,5,6, 6,3,3,3,4,3,4,6,5,3,5,5,3,3,5,6,3,5,6,3,6,3,5,5,5, 6,3,6,4,3,4,5,5,3,6,6,6,6,4,5,6,5,3,4,4,3,4,6,3,6,

另外需要注意的是,獲取文本框的值始終會返回一個字符串,因此以下(最小值和最大值)都是字符串

var min = document.getElementById('mindmg').value;
var max = document.getElementById('maxdmg').value;

在數學中使用它們之前,我會檢查它們是否確實是數字,並將其轉換為

var min = +(document.getElementById('mindmg').value);
var max = +(document.getElementById('maxdmg').value);

把+在前面將casue 如果可以投,如果不能,這將是NaN(非數字)一個數字,使您在使用之前,檢查它們是否不為NaN。 Nan很容易被檢查,因為沒有什么等於Nan,甚至Nan也沒有,所以像

if(min === min && max === max)
{
    //... all good to use con..
}

會檢查它們實際上是數字,因為Nan永遠不會等於NaN,但是3永遠等於3

演示:

http://jsfiddle.net/zprr6/

您想這樣利用它:

var dmg_done = Math.floor(Math.random() * (max - min + 1) + min);

它從0開始的原因是因為Math.random函數產生的浮點為0-1(就像許多JS函數和功能一樣)。

因此,通過告訴它從max - min + 1, ie 4 ,它避免了使用0作為起始值。

找到了問題。 最小值和最大值均用作字符串,而不是數字。 所以我將它們解析為如下這樣的整數:

var min = parseInt(document.getElementById('mindmg').value);
var max = parseInt(document.getElementById('maxdmg').value);

現在可以完美地工作了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM