IF语句,数组和函数 - Javascript

时间:2016-10-21 14:27:02

标签: javascript arrays function if-statement

对于任务,我必须创建一个生成介于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>

6 个答案:

答案 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);
}