我正在尝试在Javascript中制作一个骰子滚动计数器,但我似乎无法让它工作。 我需要代码掷骰子25次。我需要生成一个“一”,“二”,“三”,“四”,“五”,“六”的随机数组。我还需要计算每个数字的滚动次数。 这就是我所拥有的:
function rnd(dice){
var number=Math.floor(Math.random(dice)*25);
}
var dice = ["One" , "Two" , "Three" , "Four" , "Five" , "Six"];
length = dice.length;
console.log(length);
for (var i = 0; i < dice.length; i++) {
console.log("i:" + i + "" + dice[i]);
}
答案 0 :(得分:3)
最好将此问题分解为几个部分。
首先,确保你可以掷一个骰子。
const sides = ["One" , "Two" , "Three" , "Four" , "Five" , "Six"];
const roll = () => sides[Math.floor(Math.random() * 6)]
然后多次掷骰子以获得一系列n
卷。
const rolls = (n) => {
const result = [];
for (let i = 0; i < n; i++) {
result.push(roll());
}
return result;
};
最后,计算给定滚动出现的次数。
const count = (rolls) => {
const result = new Map();
for (const roll of rolls) {
result.set(
roll,
1 + (result.get(roll) || 0));
}
return result;
}
答案 1 :(得分:2)
你似乎订阅了#34;弗兰肯斯坦的怪物&#34;计算机编程学院,它要求从某个地方获取身体部位(代码片段),将它们缝合在一起,然后希望它们开始作为一个人(或者在这种情况下,作为一个计算机程序)。
从另一端开始 - 自上而下思考。用简单的英语写下你希望你的程序会做什么。实际上,你已经做了很多这样的事情:
我需要代码才能掷骰子25次。
在您做其他任何事情之前,请以伪代码的形式写下问题的这一部分,例如:
repeat 25 times
roll die
然后你的问题陈述说:
我需要生成一个“一”,“二”,“三”,“四”,“五”,“六”的随机数组。
在这里,你需要更仔细地思考你想要做什么。看看句子中的每个单词。我不认为你真的是指&#34;随机阵列&#34;。我认为你的意思是来自数组的随机值。我们在伪代码中包含它,所以它现在看起来像
repeat 25 times
roll die
to roll die
generate random value from array of "one" to "six"
最后,
我还需要计算每个数字的滚动次数。这就是我所拥有的:
我们可以解决这两种方式。一种是添加一个单独的步骤,可以称为&#34; count rolls&#34;。另一个是我们继续计算卷数。后者似乎有点简单。所以现在我们的伪代码看起来像这样:
initialize counts
loop from 1 to 25
roll die
update counts
to roll die
generate random value from array of "one" to "six"
以这种方式编写内容的好处是,我们可以清楚地看到它是否会按照我们想要的方式执行,而不会混淆JavaScript语法细节。我们可以通过它来使用&#34;橡皮鸭和#34;战略。我们也可以将其交给其他人实施。或者,我们甚至可以用其他语言实现它。
但是,我们将在JavaScript中实现它。然而,在我们这样做之前,我们将更多地充实它。它仍然是伪代码,但更详细一点。我们还需要添加一些逻辑来保存我们的结果,因此我们可以稍后打印出来。
define counts as an array of six numbers, with each value initialized to zero
define results as an empty array
loop from 1 to 25
roll die, getting a result
update counts based on result
add results to array
printout results
printout counts
to roll die
generate random value from array of "one" to "six"
return that value
现在,只有现在我们才能自信地编写一个JavaScript程序来实现它。我们的想法是做某事&#34;我们将实现为JavaScript 功能。
function rollDie() {
return Math.floor(Math.random() * 6);
}
var counts = [0, 0, 0, 0, 0, 0];
var results = [];
for (var i = 0; i < 25; i++) {
var result = rollDie();
counts[result] = counts[result] + 1;
results.push(result);
}
console.log(results);
console.log(counts);
为简单起见,此代码使用从0到5的数字而不是来自&#34; One&#34;到&#34;六&#34;,但概念是一样的。
答案 2 :(得分:0)
我非常不愿意回答这个问题,但我确实如此 首先看一下OP代码中的错误。
function rnd(dice){//the function is never used
var number=Math.floor(Math.random(dice)*25);//
}
var dice = ["One" , "Two" , "Three" , "Four" , "Five" , "Six"];
length = dice.length;
console.log(length);//good idea to count
for (var i = 0; i < dice.length; i++) {
console.log("i:" + i + "" + dice[i]);//what do you mean
}
没有尝试解决OP中的问题。解决方案来自OP。
var dice = ["One", "Two", "Three", "Four", "Five", "Six"];//here is a list of names
var stat = {};//here we will collect statistics of dice roll count
for (var i = 0; i < 25; ++i) {//"magic" 25 is the number of rolls
var rand = Math.floor(Math.random() * 6);//roll to have random [0,5]; if "dice" has more sides then use dice.length instead of "magic" 6
stat[dice[rand]] = (stat[dice[rand]] || 0) + 1;//now count hits
}
console.log(stat);
&#13;
我希望你能解释一下你的家庭作业是如何完成的。