2016-04-03 20 views
-5

我必須創建類與其他人的主類一起實現,出於某種原因,我沒有得到正確的輸出,我不確定這個錯誤來自哪裏。ArrayOutOfBoundsException錯誤?

預期輸出:

中位數= 44.5

均值= 49.300

SD = 30.581

public class StatPackage { 
int count; 
double [] scores; 



StatPackage() { 
count = 0; 
scores = new double[500]; 
} 
public void insert (double value) { 
if (count < 500){ 
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; 
    } 

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

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

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

} 
double median = 0; 
if (count % 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 < count; i++){ 
     sum += scores[i]; 
     variance += scores[i] * scores[i]; 

    } 
    double varianceFinal = ((variance/count)-(sum*sum)/(count*count)); 
    return (varianceFinal); 
} 

public double StdDev (double variance) { 
    double sum = 0; 
    for(int i = 0; i < count; i++){ 
     sum += scores[i]; 
     variance += scores[i] * scores[i]; 

    } 
    double varianceFinal = ((variance/count)-(sum*sum)/(count*count)); 
return Math.sqrt(varianceFinal); 

} 
+4

但是,您不想向我們顯示錯誤堆棧跟蹤以幫助找到問題?懶惰 – pczeus

+0

你使用什麼數據來獲得預期的結果? –

+0

我不是懶惰的錯誤不能被看到,因爲它是從我把代碼放入其他代碼,我沒有得到輸入的輸入是由另一個程序給我的。 – swaguire

回答

0

您的Median()方法的問題。嘗試改變

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

if (count % 2 == 0) 
    median = (scores[count/2] + scores[count/2 - 1])/2; 
else 
    median = scores[count/2]; 

因爲你有一個固定大小的數組500種的元素,必須將在249位和250返回的項目的平均值的代碼,這將是如果數組中的值小於251,則爲0。

0

在一個慈善/瘋狂的適合,我很快寫了一個驅動程序,試圖測試這件事。

public static void main(String[] args) 
{ 
    StatsPackage sp = new StatsPackage(); 
    for (int i = 0; i < 101; ++i) { 
     sp.insert(i); 
    } 

    System.out.println("count: " + sp.count); 
    System.out.println("mean: " + sp.Mean()); 
    System.out.println("median: " + sp.Median()); 
    System.out.println("variance: " + sp.Variance()); 
} 

超越事實位數不計算正確的值(和@BadCash可能具有該問題的解決方案),也沒有拋出ArrayOutOfBounds。

編輯:將更新設爲@BadCash建議給中值方法似乎解決了中位數沒有給出正確答案。

相關問題