【问题标题】:How can I summarize the probability results, that I got with a loop? (Java)如何总结通过循环获得的概率结果? (爪哇)
【发布时间】:2021-11-21 16:24:23
【问题描述】:

我想知道是否有办法总结我通过循环获得的概率结果?所以我可以知道有多少次成功命中,给定 x 次尝试。现在我只得到一串 1 或 0 条语句(1 表示成功命中,0 表示失败),不太实用。它看起来像这样:

public class doGry {
public static void main(String[] args ) {
    for (int i = 0; i < 50; i++) {
        // chance to hit (h) = 35% + (ma - md)
        // 8% < h < 90%
        double ma = 20;
        double md = 10;
        double probability;

        System.out.println("probability of success " + (probability = 35 + (ma - md)));

        double probab2 = probability / 100;
        double r = Math.random();

        int roll;
        if (r <= probab2) roll = 1;
        else roll = 0;
        System.out.println(roll);


    }

}

}

【问题讨论】:

  • 您可以为此使用变量,在循环外将其设置为0。每次成功时,将其值增加 1。
  • 非常感谢!除了第一次命中之外,它适用于所有情况。它从不计算第一次命中,它显示为 0,但从第二次开始就正常了。为了让一切正常,我必须将变量设置为 1。我做错了什么?

标签: java loops sum probability


【解决方案1】:

很少有变量可以在for循环之外初始化,因为你没有修改它的值,所以不需要它一次又一次地初始化它。
使用变量count,跟踪成功的命中。对于每个成功的命中,将其值增加 1。

public class doGry {
    public static void main(String[] args ) {
        double ma = 20;
        double md = 10;
        double probability = 35 + (ma - md);
        double probab2 = probability / 100;
        int count = 0;
        for (int i = 0; i < 50; i++) {

            System.out.println("probability of success " + probability);
            
            double r = Math.random();

            if (r <= probab2) 
            {
                System.out.println("1");
                count++;
            }
            else 
                System.out.println("0");
        }
        System.out.println("Succesful hits " + count);
    }
}

【讨论】:

  • 它工作!!!!非常感谢!!!1
  • @shrimpy 之前你说它不计算第一次命中,与我的代码相比有什么区别?
  • 我猜我做错了。我听取了您的建议,我没有在原始代码中的“if”下添加条件,而是在循环外添加了另一个条件语句(类似于“if roll == 1, then count++”)。对不起,我是个菜鸟。
  • @shrimpy 没关系,每个人都从那里开始。由于这可以满足您的问题,因此请接受此作为答案。
【解决方案2】:

您所要做的就是添加一个变量来跟踪发生了多少成功滚动,然后使用这样的 double 将其除以滚动总数

public class doGry
{
    public static void main(String[] args )
    {
        int total = 0;
        for (int i = 0; i < 50; i++)
        {
            // chance to hit (h) = 35% + (ma - md)
            // 8% < h < 90%
            double ma = 20.0;
            double md = 10.0;
            double probability;
    
            System.out.println("probability of success " + (probability = 35 + (ma - md)));
    
            double probab2 = probability / 100;
            double r = Math.random();
    
            int roll;
            if (r <= probab2) {roll = 1; total++;}
            else roll = 0;
            System.out.println(roll);
        }
        System.out.println("total: " + total/50.0);
    }
}

注意在最后的 System.out.println 语句中,总数除以 50.0(而不是 50),因为 .0 表示您需要双除法而不是整数除法,后者会丢弃任何余数价值观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多