[英]returning infinity in my for loop?
现在,当我运行我的代码时,它将在std dev和variance中返回无穷大。 我该如何解决?
当我从for循环中取出// VARIANCE和// STD DEV时,它给了我一个值,但它不是正确的值。 所以我在想这是因为当您将它从for循环中取出时,“ i”无法正常工作吗? 我知道“ i”是个问题,因为它应该是“对于数字列表中的元素数,取每个元素并减去平均值并求平方”。 我该如何实现?
@Override
public String calculate() throws Exception {
//String firstConfidenceInterval = String.valueOf(SRC_Calc_Type.CI(PH, CV, N));
double total = 0.0;
double total1 = 0.0;
int i;
String delims = ",";
String[] tokens = nums.split(delims);
for(i = 0; i < tokens.length; i++) {
total += (Double.parseDouble(tokens[i]));// SUM
}
double average = total / i; //average
total1 += (Math.pow((i - average), 2) / i); //VARIANCE
double std_dev = Math.pow(total1, 0.5); //STDDEV
return String.valueOf("Sum: " + total + //Works
"\nMean: " + average + //Works
"\nStandard Deviation: " + std_dev + //works
"\nVariance: " + total1); //works
//"\nNumbers Sorted: " + "( " + " )"
}
在循环外的任何地方,将i
替换为tokens.length()
。 为了避免出现此类错误,请始终在声明变量时初始化变量,并始终在最窄的范围内声明变量。 fot(int I=0 ...
在这种情况下。请注意,您的方差公式是错误的。这不是您计算方差的方式。
您需要第二个循环来计算方差
double variance=0;
for(String token : tokens) {
double value = Double.parseDouble(token);
variance += Math.pow(value-average,2);
}
variance = variance/tokens.length;
您误会了如何计算方差和标准偏差。 您不会从元素数中减去平均值。
您需要根据均值计算每个样本的差异,将它们全部平方,然后将所有平方相加。
double variance = 0.0;
for (i = 0; i < tokens.length; i++)
{
// It would be better to parse the tokens once and
// place them into an array; they are referenced twice.
double diff = Double.parseDouble(tokens[i]) - average;
variance += diff * diff;
}
// of (tokens.length - 1) for "sample" variance
variance /= tokens.length;
然后,您可以将标准差取平方根。
double std_dev = Math.sqrt(variance);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.