需要一些帮助来解决此循环

时间:2019-04-19 16:29:18

标签: javascript loops for-loop math

我需要有关此问题的帮助。 我必须使用一个函数来模拟两个骰子的启动并返回一个包含结果的数组(示例[3,2])。为了模拟启动,我必须使用函数math.random并获取1到6之间的值。  我必须将掷骰子的结果相加,并将和的结果保存在“启动结果”数组中……然后,我必须进行36,000个音高并计算出最重复的结果。 我设法用启动值的总和来生成数组,但是从36000次启动的循环中,我只能生成单个数组,而不能生成一个数组。可能是因为循环不符合要求。

function launchTwoDice() {
    let dice1 = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    let dice2 = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    let dices = [];
    dices.push(dice1);
    dices.push(dice2);
    let sum = dices.reduce(function(a, b) {
        return a + b;
    });
    let resultOfLaunch = [];
    resultOfLaunch.push(sum);
    return resultOfLaunch;
};

let allLaunches = [];

for (let i = 0; i < 36000; i++) {
    let result = launchTwoDice();
    allLaunches[result] = allLaunches[result] + 1;
    allLaunches.push(result);

};

console.log(allLaunches);

1 个答案:

答案 0 :(得分:2)

好的,我尝试解决此循环问题,我也进行了测试,它对我来说很好用,请看一下代码。

 function launchTwoDice() {
        let dice1 = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
        let dice2 = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
        return dice1+dice2;
    };
    let allLaunches = [];
    for (let i = 0; i < 36000; i++) { 
        let result = launchTwoDice(); 
        if(allLaunches[result] == undefined)
         { allLaunches[result] = 1; } 
         else { allLaunches[result] = allLaunches[result] + 1};
    };

主要问题是,当我们将count放入数组时,像这样allLaunches[result] = allLaunches[result] + 1,在这种情况下,allLaunches[result]处于未定义状态,而undefined + 1 = NaN

因此在allLaunches数组中添加计数之前要放置一个条件。

console.log(allLaunches)

(13) [empty × 2, 1041, 2024, 2923, 3982, 5128, 5968, 4980, 4055, 2930, 1929, 1040]
2: 1041
3: 2024
4: 2923
5: 3982
6: 5128
7: 5968
8: 4980
9: 4055
10: 2930
11: 1929
12: 1040
length: 13
__proto__: Array(0)