【问题标题】:Calculate Average of Previous Loop - Java计算前一个循环的平均值 - Java
【发布时间】:2015-11-06 16:26:16
【问题描述】:

所以,我正在为我的 AP 计算机科学课程编写此代码,但遇到了问题。

首先,这是我的代码:

//loop counters
int counterOne = 0;
int counterElse = 0;
int loop = 1;
int iNum = 1000;

//create file
PrintWriter outFile = new PrintWriter(new File("newFile.txt"));

for (int counter = 1; counter <= iNum; counter++)
    {
        while (loop >= 1)
        {
            Random rand = new Random();
            int iRand = rand.nextInt(5)+1;

            if (iRand != 1)
            {
                counterElse++;
                loop++;
            }//end of if of if-else
            else
            {
                counterOne++;
                loop = 0;
            }//end of else of if-else

        }//end of while loop

        int tries = counterElse+counterOne;
        //int average = (tries + prevTriesSum) / counter
        System.out.println("It took " + tries + " try/tries to win!");
        //outFile.println("It tool an average of " + average + " tries to win.");

    }//end of for loop

如何计算试验的平均值?正如您从我的代码末尾看到的那样,我注释掉了我想要计算平均值的一行。这是因为我不知道如何计算 prevTriesSum,它代表所有其他试验的总和。下面是一个例子:假设循环运行六次,第一次运行需要 3 次尝试,第二次运行 5 次,第三次运行 7 次,第四次运行 11 次,第五次运行 2 次,第六次运行 4 次(最近的一个。现在尝试 = 4)。

我希望 prevTriesSum 等于 3 + 5 + 7 + 11 + 2 + 4。

如何让程序进行计算?

【问题讨论】:

    标签: java loops random average


    【解决方案1】:
    1. 您的平均值以整数算术计算,这意味着任何小数部分都将被丢弃。考虑使用浮点类型作为平均值,并在赋值的右侧加上 1.0 * 前缀以强制以浮点形式进行计算。

    2. 您必须重新初始化循环中的随机生成器,否则会破坏其统计特性。在进入循环之前执行一次。

    【讨论】:

    • 这两个都是极好的观察结果。两者都解决了 OP 代码中的问题。两者都没有回答问题。
    【解决方案2】:

    while 循环之前,添加

    int prevTriesSum = 0;
    

    将您评论的int average = 行替换为

    prevTriesSum += tries;
    

    for循环之后添加

    double average = (prevTriesSum + 0.0) / counter;
    outFile.println("It tool an average of " + average + " tries to win.");
    

    关于随机数生成器,Bathsheba 是正确的。您必须将其移到 for 循环上方。只需移动声明即可。

    您还需要稍微更改 for 循环。就目前而言,当for 循环终止时,它将等于 1001。修改如下:

    for (int counter = 0; counter < iNum; counter++)
    

    这将确保您的average 计算正确。

    【讨论】:

    • 非常感谢。对于随机数生成器,我是否只需移动“Random rand = new Random();”还是我也要移动“int iRand = rand.nextInt(5)+1;”?而且,对于运行变量,为什么我不能使用我在 for 循环中创建的计数器变量?
    • 只需移动随机数生成器声明Random rand = new Random();。对于runs 变量,我想我没有给予足够的关注。您的 counter 变量应该没问题。除非您需要更改它的边界以使其基于 0,否则您将在 for 循环终止后偏离 1。我会在答案中更改它。
    猜你喜欢
    • 2016-12-22
    • 2021-12-03
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多