计算上一循环的平均值 - Java

时间:2015-11-06 16:26:17

标签: java loops random average

所以,我正在为我的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。

如何让程序计算出来?

2 个答案:

答案 0 :(得分:1)

  1. 您的平均值以整数运算计算,这意味着丢弃任何小数部分。考虑使用浮点类型作为平均值,并在赋值的右侧添加前缀1.0 *以强制计算以浮点形式发生。

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

答案 1 :(得分:0)

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计算正确无误。