2016-04-03 66 views
-1

我必須創建類來實現與其他人的主類,由於某種原因,我沒有得到正確的輸出,我不知道我的計算是關閉的,我不認爲他們或我的插入上課是錯誤的。爲什麼我的代碼輸出錯誤?我的插入類錯了嗎?

預期輸出:

中位數= 44.5

平均數= 49.300

SD = 30.581

實際輸出:

中位數= 0.0

平均數= 0.967

SD = 4.712

public class StatPackage { 
int count; 
double [] scores; 
final int MAX = 500; 


StatPackage() { 
count = 0; 
scores = new double[MAX]; 
} 
public void insert (double value) { 
if (count < MAX){ 
scores[count] = value; 
++ count; 
} 
} 
public double Mean() { 
    double sum = 0; 
    //For loop for calculating average or mean 
    for(int i = 0; i < scores.length; i++){ 
      sum += (scores[i]); 
      count++;  
    } 
    double average = sum/count; 
    return average; 
    } 

public double Median() { 
int min; 
int tmp; 
int size; 

for (int i = 0; i < scores.length - 1; i ++) 
{ 
min = i; 
for (int pos = i + 1; pos < scores.length; pos ++) 
if (scores [pos] < scores [min]) 
min = pos; 

tmp = (int)scores [min]; 
scores [min] = scores [i]; 
scores [i] = tmp; 

} 
double median = 0; 
if (scores.length % 2 == 0){ 
    median = (scores[scores.length/2-1] + scores[scores.length/2])/2; 
} 
else { 
    median = (scores[((scores.length/2))]); 
} 
return median; 
} 

public double Variance() { 
    double variance = 0; 
    double sum = 0; 
    //For loop for getting the variance 
    for(int i = 0; i < scores.length; i++){ 
     sum += scores[i]; 
     variance += scores[i] * scores[i]; 
     count++; 
    } 
    double varianceFinal = ((variance/count)-(sum*sum)/(count*count)); 
    return (varianceFinal); 
} 

public double StdDev (double variance) { 
    double sum = 0; 
    for(int i = 0; i < scores.length; i++){ 
     sum += scores[i]; 
     variance += scores[i] * scores[i]; 
     count++; 
    } 
    double varianceFinal = ((variance/count)-(sum*sum)/(count*count)); 
return Math.sqrt(varianceFinal); 

} 

} 
+2

嘗試調試器下運行它。 – JJF

回答

0

你的分數數組的長度爲500,因此,所使用它在計算每次您正在運行500次。您需要使循環延續條件取決於數組中值的數量,而不是數組的實際長度。我會小心你的變量命名,有時候你會在兩個地方使用count,它具有全局範圍!這種方法將存儲計數變量數組中值的數目:

public void insert (double value) { 
    if (count < MAX){ 
     scores[count] = value; 
     ++count; 
    } 
} 

因此,使用計數變量作爲循環延續的條件,當你從數組中獲取值,就像這樣:

public double mean() { 

     double sum = 0; 

     //For loop for calculating average or mean 
     for(int i = 0; i < count; i++){ 
      sum += (scores[i]); 
     } 

     double average = sum/count; 
     return average; 
    } 

這應該有點幫助,我沒有時間查看其他方法,但也許這會給你一個很好的起點。我想通過在你的方法中插入print語句來確定所發生的情況,以確保值符合預期。調試時做一件有用的事情。你的意思()方法與print語句如下:

public double mean() { 

    double sum = 0; 

    //For loop for calculating average or mean 
    for(int i = 0; i < count; i++){ 
     sum += (scores[i]);  
    } 

    // print statements for debugging 
    System.out.println("count is " + count); 
    System.out.println("sum is " + sum); 

    double average = sum/count; 
    return average; 
} 
0

由於該解決方案很容易被調試發現,我只會給你一個提示:

mean的3,4和5是4:(3+4+5)/3,而不是(3+4+5)/(n*3)其中 n是一個正整數。

如果你看看你的意思和標準,並將其除以預期的結果,你會看到它是一個四捨五入的數字。

一旦你找到了解決問題1,你會立刻知道爲什麼其他結果是錯誤的,以及=)

相關問題