2016-04-03 64 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,你会立刻知道为什么其他结果是错误的,以及=)

相关问题