Java 加上最后的平均值
我在添加循环的最后一个编号时遇到问题。我不知道如何将最后一个数字包括在内,然后将其添加到双变量中,然后将其除以平均值。我会使用我的IDE来解决这个问题,但输入必须是大约1000次试验才能准确。你可以清楚地看到,10次3.0或更高的试验并不等于大约2.8次。我只需要把缺失的试验加起来,然后算入平均值 代码:Java 加上最后的平均值,java,Java,我在添加循环的最后一个编号时遇到问题。我不知道如何将最后一个数字包括在内,然后将其添加到双变量中,然后将其除以平均值。我会使用我的IDE来解决这个问题,但输入必须是大约1000次试验才能准确。你可以清楚地看到,10次3.0或更高的试验并不等于大约2.8次。我只需要把缺失的试验加起来,然后算入平均值 代码: import java.util.*; 公共类计算器2 { 公共静态布尔ifitisInside(双xPosion,双yPosion) { 双距离=Math.sqrt((xPosion*
import java.util.*;
公共类计算器2
{
公共静态布尔ifitisInside(双xPosion,双yPosion)
{
双距离=Math.sqrt((xPosion*xPosion)+(yPosion*yPosion));
返回(距离<1.0);
}
公共静态双计算器(整数)
{
Random randomGen=新的Random();
int hits=0;
双PI=0;
双α=0;
双平均=0;
对于(int m=0;m=0)
{
点击率=0;
PI=0;
对于(int i=0;i我认为您可以通过重新排列代码来解决这个问题:
public static double calculatePI (int numThrows)
{
Random randomGen = new Random();
int hits = 0;
double PI = 0;
double Alpha=0;
double average= 0;
for( int m=0; m<10; m++)
{
for (int i = 0; i <= numThrows; i++)
{
double xPosion = (randomGen.nextDouble()) * 2 - 1.0;
double yPosion = (randomGen.nextDouble()) * 2 - 1.0;
if (ifitisInside(xPosion, yPosion))
{
hits++;
double dthrows = numThrows;
PI += (4.0 * (hits/dthrows)); // NOTE: += not =+
}
}
Alpha+=PI; // NOTE += not =+
average= m/Alpha;
if(m>=0)
{
hits=0;
PI=0;
}
System.out.println("Trial["+m+"]: ="+ PI);
}
}
应该是:
average=Alpha/m
只需将平均计算从内部循环中取出。此外,循环不变量是从0到Alpha=+PI;
相当确定的是Alpha+=PI;
。更改它并检查它是否有效。@ValekHalfHeart不是它使平均值小于1。对不起,应该是X
。我将重新发布我的日志评论,因为现在编辑已经太晚了。如果M(n)
是n
值的平均值,X
是另一个要添加的值,那么M(n+1)=(M(n)*n+X)/(n+1)
在您的精度范围内无法解决问题。我将继续讨论,并在2013年12月29日保留此问题
average=m/Alpha;
average=Alpha/m
double sumPiOverMTrials = 0;
for( int m=0; m<10; m++)
{
double hits = 0;
for (int i = 0; i < numThrows; i++) {
double xPosition = (randomGen.nextDouble()) * 2 - 1.0;
double yPosition = (randomGen.nextDouble()) * 2 - 1.0;
if (ifitisInside(xPosition, yPosition))
{
hits++;
}
}
double pi = 4.0 * hits/numthrows;
System.out.println("Trial["+m+"]: ="+ pi);
sumPiOverMTrials += pi;
}
System.out.println("Average over "+m+" trials ="+ sumPiOverMTrials/10);