为什么我的代码输出错误?我的插入类错了吗?
问题描述:
我必须创建类来实现与其他人的主类,由于某种原因,我没有得到正确的输出,我不知道我的计算是关闭的,我不认为他们或我的插入上课是错误的。为什么我的代码输出错误?我的插入类错了吗?
预期输出:
中位数= 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);
}
}
答
你的分数数组的长度为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;
}
答
由于该解决方案很容易被调试发现,我只会给你一个提示:
的
mean
的3,4和5是4:(3+4+5)/3
,而不是(3+4+5)/(n*3)
其中n
是一个正整数。
如果你看看你的意思和标准,并将其除以预期的结果,你会看到它是一个四舍五入的数字。
一旦你找到了解决问题1,你会立刻知道为什么其他结果是错误的,以及=)
尝试调试器下运行它。 – JJF