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

Java 为什么我的代码输出错误?我的插入类错了吗?,java,arrays,class,Java,Arrays,Class,我必须创建要与其他人拥有的主类一起实现的类,并且由于某些原因,我没有得到正确的输出,我不确定我的计算是否偏离了我认为不正确的方向,或者我的插入类是错误的 预期产出: 中位数=44.5 平均值=49.300 标准差=30.581 实际产量: 中位数=0.0 平均值=0.967 标准差=4.712 public class StatPackage { int count; double [] scores; final int MAX = 500; StatPackage() { co

我必须创建要与其他人拥有的主类一起实现的类,并且由于某些原因,我没有得到正确的输出,我不确定我的计算是否偏离了我认为不正确的方向,或者我的插入类是错误的

预期产出:

中位数=44.5

平均值=49.300

标准差=30.581

实际产量:

中位数=0.0

平均值=0.967

标准差=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);

}

}   
公共类StatPackage{
整数计数;
双[]分;
最终int最大值=500;
StatPackage(){
计数=0;
分数=新的双倍[最大值];
} 
公共无效插入(双值){
如果(计数<最大值){
分数[计数]=数值;
++计数;
} 
} 
公共双平均值({
双和=0;
//用于计算平均值或平均值的For循环
for(int i=0;i
分数数组的长度是500,因此每次在计算中使用它时,都要运行500次。您需要使循环继续条件取决于数组中的值的数量,而不是数组的实际长度。我也会注意你的变量命名,你有时会在两个地方使用count,它有全局范围!此方法将数组中的值数存储在count变量中:

public void insert (double value) { 
    if (count < MAX){ 
        scores[count] = value; 
        ++count; 
    } 
} 
public void insert(双值){
如果(计数<最大值){
分数[计数]=数值;
++计数;
} 
} 
因此,当您从数组中获取值时,请使用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 mean(){
双和=0;
//用于计算平均值或平均值的For循环
for(int i=0;i
这应该有点帮助,我没有时间检查你的其他方法,但也许这会给你一个好的起点。我通过在方法中插入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;
} 
public double mean(){
双和=0;
//用于计算平均值或平均值的For循环
for(int i=0;i
因为通过调试很容易找到解决方案,所以我只给您一个提示:

3、4和5的
平均值为4:
(3+4+5)/3
,而不是
(3+4+5)/(n*3)
,其中
n
是一个正整数

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


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

尝试在调试器下运行它。