初学者:掷骰子:频率和如果-否则-如果

beginner: rolling a dice: frequency and if-else-if?

本文关键字:如果 否则 频率 掷骰子 初学者      更新时间:2023-09-26

如何显示骰子每个面完成最高频率?

//this program stimulates rolling a dice
var outputAreaRef = document.getElementById("outputArea");
var array=[0, 1, 2, 3, 4, 5, 6];
var i=1;
var outString="";
while (i<60000)
{
    var number=Math.floor((Math.random() * 6) + 1);
    array[number]++;
    i++;
}
outputAreaRef.innerHTML = " array: " + array  ;

我知道你想做什么,在这里解释可能更容易。

您有几个问题。数组的长度应为 6,而不是 7,并且所有值都必须以 0 开头,否则您将收到误报。如果 Zero 真的是 One,那么你在输出时会修改,不要把它放在你的逻辑中。

该方法递增是正确的,但随机数应为 0-5。最终,您可以循环并输出或使用控制台。控制台是检查和调试代码比 DOM 注入更好的方法。

如果您对此一无所知,请看一下:-)Chrome DevTools

var array=[0,0,0,0,0,0];
var i=1;
while (i<60000)
{
  var number=Math.floor(Math.random()*6);
  ++array[number];
  i++;
}
console.table(array)

看起来您只是缺少输出语法。您需要输出数组的每个索引,后跟其值。试试这个:

//this program stimulates rolling a die
var outputAreaRef = document.getElementById("outputArea");

var array=[0, 1, 2, 3, 4, 5, 6];
var i=1;
var outString="";
while (i<60000)
{
var number=Math.floor((Math.random() * 6) + 1);
array[number]++;
i++;
}
for(var i = 0; i < array.length; i++)
{
    outputAreaRef.innerHTML += i + ": " + array[i] +"<br />";
}

如果我认为您要查找的内容是正确的,那么这将可以做到。我根据自己对如何完成此操作的偏好更改了一些代码,但概念是相同的。如果您继续使用数组,则可以使用 forEach 来迭代它。

var array = { 1:0, 2:0, 3:0, 4:0, 5:0, 6:0 };
iterations = 60000;
for (var i = 0; i < iterations; i++)
{
  var number=Math.floor((Math.random() * 6) + 1);
  array[number]++;
}
document.getElementById("outputArea").innerHTML = " array: " + JSON.stringify(array)  ;
for( var k in array ) {
  array[k] = Math.round((array[k] / iterations) * 1000)/1000;
}
document.getElementById("frequencies").innerHTML = " array: " + JSON.stringify(array)  ;
<div id="outputArea"></div>
<div id="frequencies"></div>