我正在尝试在JavaScript中将骰子滚动1000次,但我的数组破坏了NaN

时间:2018-08-25 18:02:20

标签: javascript

因此,出于某种原因,count [无论如何]都会返回NaN。为什么?

  var i;
  var count = new Array(12);
  for( i = 0; i<999;i++)
   {
     var firstDice = Math.floor(Math.random() * 7);
     var secondDice= Math.floor(Math.random() * 7);
     var total = firstDice + secondDice;
     count[total]++;
   }

   console.log(count[3]);
   for(index=2; index<=12; index++)
   {
     console.log("EL NUMERO "+index+" SALIO "+ count[index]+" VECES MIVIVI");
   }

2 个答案:

答案 0 :(得分:2)

您没有初始化数组,请执行以下操作:

var count = Array.from({ length: 13 }, () => 0);

var count = new Array(13).fill(0);

@ ibrahim-mahrir在评论中建议。

还要注意,您需要13个元素,而不是12个(0、1、2 ... 12)。

const count = Array.from({ length: 12 }, () => 0);

for(let i = 0; i<999;i++) {
    const firstDice = Math.floor(Math.random() * 7);
    const secondDice= Math.floor(Math.random() * 7);
    const total = firstDice + secondDice;
    count[total]++;
}

console.log(count[3]);

for(let index=2; index<=12; index++) {
  console.log("EL NUMERO "+index+" SALIO "+ count[index]+" VECES MIVIVI");
}

这是因为,当您使用new Array(12);时,会创建一个未定义的数组,因此,当您对未定义的值进行++时,仍然会有一个未定义的值。

答案 1 :(得分:2)

您可以采用包含13个元素的数组,因为您有13个索引。然后,您必须将值1 ... 6作为骰子面的随机数。

var i,
    count = Array.from({ length: 13 }, _ => 0),
    firstDice, secondDice, total;

for (i = 0; i < 999; i++) {
    firstDice = Math.floor(Math.random() * 6 + 1);
    secondDice = Math.floor(Math.random() * 6 + 1);
    total = firstDice + secondDice;
    count[total]++;
}
console.log(count[3]);

for (i = 2; i <= 12; i++) {
    console.log("EL NUMERO " + i + " SALIO " + count[i] + " VECES MIVIVI");
}