我必须创建要与其他人拥有的主要类一起实现的类,并且出于某种原因我没有得到正确的输出,我不确定我的计算是否已经完成,我不认为他们是或我的插入类错了。
预期产出:
中位数= 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);
}
}
答案 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问题的解决方案,您将立即知道为什么其他结果也有问题=)