Java 为什么我的代码输出错误?我的插入类错了吗?
我必须创建要与其他人拥有的主类一起实现的类,并且由于某些原因,我没有得到正确的输出,我不确定我的计算是否偏离了我认为不正确的方向,或者我的插入类是错误的 预期产出: 中位数=44.5 平均值=49.300 标准差=30.581 实际产量: 中位数=0.0 平均值=0.967 标准差=4.712Java 为什么我的代码输出错误?我的插入类错了吗?,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
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
是一个正整数
如果你看一下你的平均值和标准差,然后除以预期结果,你会看到它是一个四舍五入的数字
一旦找到了一个问题的解决方案,您将立即知道为什么其他结果也有问题=)尝试在调试器下运行它。