所以,我正在为我的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。
如何让程序计算出来?
答案 0 :(得分:1)
您的平均值以整数运算计算,这意味着丢弃任何小数部分。考虑使用浮点类型作为平均值,并在赋值的右侧添加前缀1.0 *
以强制计算以浮点形式发生。
您必须不重新初始化循环中的随机生成器,否则会破坏其统计属性。在你进入循环之前做一次。
答案 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
计算正确无误。