簡體   English   中英

返回無限在我的循環?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM