对于任务,我必须创建一个生成介于1和9之间的数字的函数。此函数需要调用100次。然后我需要创建一个9元素数组,它将记录每个数字出现的次数。我的代码如下。目前正在生成一个数字并且数组会发生变化。但是数组没有正确更改,它改变了错误的索引,我不知道为什么,有人可以帮忙吗?任何关于如何调用该函数100次的建议都将受到赞赏。它的工作原理或外观无关紧要,我不需要设置格式。 提前谢谢!
<script>
function numberGenerate () {
var nmbrGen = Math.floor(Math.random()*8 +1) ;
return nmbrGen;
}
function numberChange () {
document.write(numberGenerate(), "<br>");
var numberArray = [0,0,0,0,0,0,0,0,0];
if (numberGenerate() == 1){
numberArray[0]++;
}
else if (numberGenerate() == 2) {
numberArray[1]++;
}
else if (numberGenerate() == 3) {
numberArray[2]++;
}
else if (numberGenerate() == 4) {
numberArray[3]++;
}
else if (numberGenerate() == 5) {
numberArray[4]++;
}
else if (numberGenerate() == 6) {
numberArray[5]++;
}
else if (numberGenerate() == 7) {
numberArray[6]++;
}
else if (numberGenerate() == 8) {
numberArray[7]++;
}
else {numberArray[8]++;}
document.write(numberArray);
}
</script>
</head>
答案 0 :(得分:3)
你在每个if语句中调用numberGenerate()
这意味着它将在每个if语句中生成一个新数字。如果您生成一次数字并进行比较,您的代码将起作用,如下所示:
var nRand = numberGenerate();
if (nRand ==...
毋庸置疑,您的代码编写得不好(以无害的方式说出来)。您可以使用以下内容替换所有if语句:
numberArray[nRand - 1]++;
运行100次:
for (var i = 0; i < 100; i++) {
var nRand = numberGenerate();
console.log('run ' + (i+1) + ': ' + nRand);
numberArray[nRand - 1]++;
}
答案 1 :(得分:0)
您得到错误的索引,因为您要分配1到0,2到1,依此类推。试试这个:
var numberArray = [0,0,0,0,0,0,0,0,0,0];
var times = 100; // Run this 100 times
for(var i = 0; i < times; ++i) {
number = numberGenerate();
if(number < numberArray.length) { //Checks, just to be sure
numberArray[number]++;
}
}
PS:使用随机功能,您将获得1到8的数字,但不包括9.我不确定这是否是您的意图。这会解决它:
function numberGenerate () {
return Math.floor(Math.random() * 9 + 1);
}
答案 2 :(得分:0)
试试这个:
function numberGenerate () {
var nmbrGen = Math.floor(Math.random()*9 +1) ;
return nmbrGen;
}
function randomGenerationStats(howManyTimes) {
var stats = {};
for(var i = 0; i < howManyTimes; i++) {
var randomNumber = numberGenerate();
if(stats[randomNumber]) {
++stats[randomNumber];
} else {
stats[randomNumber] = 1;
}
}
return stats;
}
console.log(randomGenerationStats(100));
打印:
Object {1: 14, 2: 13, 3: 11, 4: 8, 5: 12, 6: 18, 7: 6, 8: 5, 9: 14}
控制台中的输出将是对象,其中键是1-9中的数字,其值是它们出现的次数。
答案 3 :(得分:0)
希望这有帮助,即使有些答案可以做到。
var numberArray = [0,0,0,0,0,0,0,0,0];
var nmbrGen;
for(var i=0; i<100; i++) { // From 0 to 99, so 100 time.
nmbrGen = Math.floor(Math.random() * 9 + 1); // 9 + 1 = (Max - Min + 1 + Min)
console.log("Generated : "+nmbrGen);
numberArray[nmbrGen-1]++;
}
答案 4 :(得分:0)
如果我理解你,你想计算这9个随机数的出现次数吗?
如果为此使用关联数组(字典),则会更容易。
您有一个生成1到9之间随机数的函数。
我创建了一个带有9个键(从1到9)的关联数组,并将相应的值设置为0.该值是“出现计数器”。
然后我们按照您的要求循环100次并更改该值的计数器。像这样的东西:
function numberChange() {
// read this array as "value 1 has 0 occurrences, value 2 has 0 occurrences, etc."
var numberArray = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9:0 }
for (var i = 0; i < 100; i++) {
// generate 100 random numbers and add the relative counter value.
var newRandomNumber = numberGenerate();
numberArray[newRandomNumber]++;
}
// loop through all keys and display the respective occurrence counter value.
for (var key in numberArray) {
console.log("Number: " + key + " Occurrences: " + numberArray[key]);
}
}
function numberGenerate() {
var nmbrGen = Math.floor(Math.random() * 9 + 1);
return nmbrGen;
}
function numberChange() {
// read this array as "value 1 has 0 occurrences, value 2 has 0 occurrences, etc."
var numberArray = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9:0 }
for (var i = 0; i < 100; i++) {
// generate 100 random numbers and add the relative counter value.
var newRandomNumber = numberGenerate();
numberArray[newRandomNumber]++;
}
// loop through all keys and display the respective occurrence counter value.
for (var key in numberArray) {
console.log("Number: " + key + " Occurrences: " + numberArray[key]);
}
}
function numberGenerate() {
var nmbrGen = Math.floor(Math.random() * 9 + 1);
return nmbrGen;
}
答案 5 :(得分:0)
首先,您的numberGenerate
功能存在错误。它只会生成1到8之间的数字。您需要做的是将相应的行更改为Math.floor(9 * Math.random() + 1)
。
其次,每次连续调用numberGenerate
都会创建一个新的随机数。调用该函数一次,并在每次循环迭代时存储一次值。因此,您必须在var rand = numberGenerate();
函数的顶部插入numberChange
之类的行,并将numberGenerate
后面的所有来电替换为rand
。
第三,注意一个模式,其中包含if条件中的数字和下面的语句。条件中的数字是0-8,下面的语句中的数字比它多一个。通过用这一行numberArray[rand - 1]++
替换所有if语句,您可以在实现此模式后将所有这些简单地合并为一个语句。
最后,你忘记了最重要的部分!你需要迭代100次!在numberChange
函数中包含围绕代码的for循环。
在您完成所有这些更改后,代码应该与此类似。
function numberGenerate () {
return Math.floor(9 * Math.random() + 1);
}
function numberChange () {
var numberArray = [0, 0, 0, 0, 0, 0, 0, 0, 0];
for(var i = 0; i < 100; i++) {
var rand = numberGenerate();
document.write(rand, "<br>");
numberArray[rand - 1]++;
}
document.write(numberArray);
}