为什么我的代码输出错误?我的插入类错了吗?

时间:2016-04-03 18:30:04

标签: java arrays class

我必须创建要与其他人拥有的主要类一起实现的类,并且出于某种原因我没有得到正确的输出,我不确定我的计算是否已经完成,我不认为他们是或我的插入类错了。

预期产出:

中位数= 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 个答案:

答案 0 :(得分:0)

得分数组的长度为500,因此每次在计算中使用它时,运行500次。您需要使循环连续条件取决于数组中的值的数量,而不是数组的实际长度。我会小心你的变量命名,你有时会在两个地方使用count,它有全局范围!此方法将数组中的值的数量存储在count变量中:

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

因此,当您从数组中获取值时,请使用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语句的mean()方法如下所示:

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;
} 

答案 1 :(得分:0)

因为通过调试很容易找到解决方案,所以我只会给你一个提示:

  

3,4和5的mean为4:(3+4+5)/3,而不是(3+4+5)/(n*3)   n是一个正整数。

如果你看一下你的平均值和标准并将其除以预期结果,你会看到它是一个四舍五入的数字。

一旦找到1问题的解决方案,您将立即知道为什么其他结果也有问题=)