【发布时间】:2016-10-24 16:55:36
【问题描述】:
这是我的全部代码。我对标准偏差公式有疑问。 我使用这些值运行程序:
项目数:5
项目:16 25 81 80 24
我应该得到这个输出:
平均:45.20
标准偏差:32.41
低于平均值:3
数组没有排序
相反,我得到了这个输出:
数组没有排序
平均:45.20
标准偏差:55.60
低于平均值:3
import java.text.DecimalFormat;
import java.util.Scanner;
public class array {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
DecimalFormat df = new DecimalFormat ("#.00");
System.out.println("How many values do you want?");
int num = input.nextInt();
if (num< 1 || num > 100)
{
System.out.println("Error");
System.exit(0);
}
int[] array= valueArray(input, num);
double o= average(num, array);
double standdev = getStdDev(array, num);
int lessThanAvg = lessAvg ( array, num, o );
boolean sorted=isArraySorted(array, num);
System.out.println("Average: " + df.format(o));
System.out.println("Std Dev: " + df.format(standdev));
System.out.println("Less than Avg: " + lessThanAvg);
}
public static int[] valueArray (Scanner input, int num )
{
int[] values = new int[100];
System.out.println("What numbers do you want to put in?");
for (int j = 0; j < num; j++)
{
values[j]=input.nextInt();
}
return values;
}
public static double average ( int num ,int[] values)
{
double avg=0.0;
for (int i = 0; i < num; i++)
{
avg = avg+values[i];
}
return avg/num;
}
public static double getStdDev (int [] values, int num)
{
double avg = 0.0;
double sum = 0 ;
for (int i = 0; i < num - 1; i++)
{
sum = Math.sqrt ((Math.pow((values[i]-avg),2) + Math.pow((values[num-1]),2)) / num-1);
}
return sum;
}
public static int lessAvg ( int [] values, int num, double avg )
{
int counter = 0;
for (int i = 0; i < num; i++ )
{
if (values[i] < avg)
{
counter = counter + 1;
}
}
return counter;
}
public static boolean isArraySorted (int [] values, int num)
{
for (int i = 0; i < num - 2; i++)
{
if (values[i]>values[i+1])
{
System.out.println("Array is not in sorted order");
return false;
}
}
System.out.println("Array is in sorted order");
return true;
}
}
【问题讨论】:
-
你的代码比它需要的复杂得多。考虑不使用数组并移动实际元素的数量;创建一个您需要的大小的数组,然后在迭代时只使用该数组的 .length 字段!然后:您希望我们花时间帮助您。所以请您花 一 分钟来真正正确地缩进/格式化您的源代码。最后:您是否考虑过使用调试器或打印您的计算步骤?为什么要依赖其他人来检查自己的代码?
-
我必须用这种格式写这个程序,我还是个java编程新手。我对调试器不是很熟悉
-
在
stdDev中,您正在循环,但对于每次迭代,您都在替换sum的值 -
你的 getStdDev 函数是一团糟,你为什么不将平均值作为参数传递给函数?您在开始计算之前将平均值设置为 0。即使您正确设置了平均值,您的计算也是错误的
-
我也在谈论缩进。看看你上面的 main 方法是什么样子的!
标签: java