Javascript probability
Javascript probability
本文关键字:probability Javascript 更新时间:2023-09-26
我正在尝试使用数学随机对象制作一个逼真的无偏见的JavaScript骰子。我希望在单击时网页上显示 2-12 之间的数字,但它没有返回。我的代码有什么问题。
<html>
<head><title>DiceBoy</title>
</head>
<body>
<script>
function getRandom(){
var num=Math.random();
if(num < 0.0278) return 2;
else if(num < 0.0834) return 3;
else if(num < 0.1667) return 4;
else if(num < 0.2778) return 5;
else if(num < 0.4167) return 6;
else if(num < 0.5834) return 7;
else if(num < 0.7223) return 8;
else if(num < 0.8334) return 9;
else if(num < 0.9167) return 10;
else if(num < 0.9723) return 11;
else return 12;
var x=getRandom();
document.write(x);
}
</script>
<input type="button" value="Click Here" onClick="getRandom();">
</body>
</html>
为什么不这样写:
var RandomNumber1 = Math.floor(Math.random() * 6) + 1;
var RandomNumber2 = Math.floor(Math.random() * 6) + 1;
var DiceNumber = RandomNumber1 + RandomNumber2;
试试这个:
<html>
<head>
<title>DiceBoy</title>
</head>
<body>
<script>
function getRandom() {
return (Math.floor(Math.random() * 6) + 1) * 2;
}
</script>
<input type="button" value="Click Here" onClick="document.write(getRandom());">
</body>
</html>
JSFiddle: http://jsfiddle.net/kvFE5/1/
理想情况下,您应该重构它以不引人注目的方式处理。
虽然老实说 - 你为什么不使用数学随机...
返回语句将在到达时退出该方法,并且不会运行其余代码。您也不想从方法内部调用 getRandom 方法,否则您将有一个永无止境的循环。而不是返回数字(因为没有人在侦听返回值),而是将其存储在变量中,然后在最后两行使用它。
function getRandom(){
var num=Math.random();
var result = 0;
if(num < 0.0278) result = 2;
else if(num < 0.0834) result = 3;
else if(num < 0.1667) result = 4;
.
.
else result = 12;
document.write(result);
}
尝试这样的东西来生成两个数字之间的随机数
/**
* Returns a random integer between min and max
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
在您的情况下,呼叫像
getRandomInt (2, 12);
完整的 html 将看起来像
<html>
<head>
<script type="text/javascript">
/**
* Returns a random integer between min and max
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function generateNumber()
{
document.getElementById('generated-id').innerHTML = getRandomInt (2, 12);
}
</script>
</head>
<body>
Generated number : <span id="generated-id"></span>
<input type="button" onclick="generateNumber();" value="Generate random number" />
</body>
</html>
你可以使用Math.floor
尝试像他这样的东西,它将一个数字向下舍入到最接近的整数。
<html>
<head>
<title>DiceBoy</title>
</head>
<body>
<script type="javascript/text">
function getDieRoll() {
return Math.floor(Math.random() * (12 - 1+ 1)) +1;
}
</script>
<input type="button" value="Click Here" onClick="document.write(getDieRoll());">
</body>
</html>
问题是..
var x=getRandom();
document.write(x);
永远不会被调用,因为在此之前函数"返回"。将代码移到函数外部,以便它可以调用随机化函数,然后使用结果。
function getRandom () {
// the long icky original code WITHOUT the following:
// var x=getRandom();
// document.write(x);
}
// later, OUTSIDE the function
var result = getRandom();
document.write(result);
但是,获得相同效果的更好方法是使用:
function getDiceRole() {
return Math.floor(Math.random() * 6) + Math.floor(Math.random() * 6) + 2
}
对于读者:至于为什么需要两次掷骰子,请参阅骰子角色统计 - 请注意,获得所有值的概率并不相等。也就是说,简单的Math.floor(Math.random() * 11) + 2
是不正确的。
.. 在掷出两个骰子时,两个骰子总数的不同可能性并不相同,因为获得某些数字的方法比其他方法更多。
相关文章:
- 为什么我在尝试使用 StageWebView 在 AIR Android 应用程序中实现 Google Maps Jav
- 是 var { route, redirect, routeHandler, Link } = router;在 Jav
- 如何仅针对某些情况(如特定于Internet Explorer的CSS或特定于Internet Explorer的Jav
- Understanding Vertical Movement Method in "Eloquent Jav
- Tacos AjaxEventSubmit没有't在刷新后为Tapestry Palette组件附加必要的jav
- 如何使用moments .js解析“今天”等英语单词“tomorrow"“去年friday"到Jav
- TypeError: Cannot read property 'style' of null (Jav
- 使用在Visual Studio 2010中从mindscape web工作台(coffeescript源)生成的jav
- Django 1.10 -使用Django .shortcut .render生成一个带有变量的网页,其中包含一个jav
- twitter bootstrap-Xpages,需要全局变量将字段的新ID映射回字段的原始ID,以便可以与客户端Jav
- Javascript probability