如何创建包含 100 个随机整数的一维数组并找到平均值、标准差和方差?
How to create a single dimensional array containing 100 random integers and find the Average value, Standard Deviation and Variance?
我尝试过这样做,但我认为我做错了什么。我是初级程序员,我真的需要这方面的帮助。我觉得我离答案很近了,但我不确定我的程序出了什么问题。我尝试通过方差结果的平方根来检查我的答案以获得标准差,但它们不匹配。
import java.util.Random;
public class Lab6 {
public static void main(String[] args) {
System.out.println("The Average Value is:"+avgValue());
System.out.println("The Standard Deviation is:"+stdDev());
System.out.println("The Variance is:"+Var());
}
public static int randomFill(){
Random rand = new Random();
int randomNum = rand.nextInt();
return randomNum;
}
private static int[] anArray;
public static int[] list() {
anArray = new int[100];
for(int i=0;i<anArray.length;i++)
{
anArray[i] = randomFill();
}
return anArray;
}
private static int sum;
public static int avgValue() {
int []a = list();
for (int e:a)
{
sum +=e;
}
int n=100;
sum=sum/n;
return sum;
}
private static int pwr;
public static int stdDev() {
int []b = list();
int dev=0;
for (int e:b)
{
dev=(e-sum)+dev;
}
pwr=(dev*dev)/99;
double root=Math.sqrt(pwr);
return pwr;
}
public static int Var() {
int c= pwr;
int opp=c*c;
return opp;
}
}
我已经有一段时间没有做统计了,但我可以指出你的 avgValue() 方法和你的 stdDev() 是针对两个不同的 int 数组计算的。当你调用 list() 时,你每次都会得到一个不同的整数数组并覆盖 anArray.
我建议在您的主要方法中创建数组,然后将其作为参数传递给其他方法。如果你想走你现在的路线,把 "int []b = list();" 改成 "int []b = anArray;" 就可以了。
总的来说,我认为您接下来可能想尝试研究方法参数和变量范围以改进您的 Java。继续开卡车;它变得更容易。
我记不清方差和标准差的公式,但是你的代码中与编程逻辑相关的一个错误是你在计算平均值时调用了一次 list()
,在计算标准差时调用了一次.
每次调用您的 list()
方法 returns 一个具有新随机值的新数组。因此,从本质上讲,即使您从代码中正确计算出标准差,您考虑的平均值(即 sum
变量)也对应于其他一些数组的平均值。
public static void main(String... args) {
int[] arr = createRandomArray(100);
System.out.printf(Locale.US, "The Average Value is: %.2f\n", mean(arr));
System.out.printf(Locale.US, "The Standard Deviation is: %.2f\n", standardDeviation(arr));
System.out.printf(Locale.US, "The Variance is: %.2f\n", variance(arr));
}
public static int[] createRandomArray(int total) {
int[] arr = new int[total];
Random random = new Random();
for (int i = 0; i < arr.length; i++)
arr[i] = random.nextInt(100);
return arr;
}
public static double mean(int[] arr) {
return (double)Arrays.stream(arr).sum() / arr.length;
}
public static double standardDeviation(int[] arr) {
double mean = mean(arr);
double sum = IntStream.range(0, arr.length)
.boxed()
.map(i -> Math.pow(arr[i] - mean, 2))
.mapToDouble(d -> d)
.sum();
return Math.sqrt(sum / arr.length);
}
public static double variance(int[] arr) {
return Math.pow(standardDeviation(arr), 2);
}
我尝试过这样做,但我认为我做错了什么。我是初级程序员,我真的需要这方面的帮助。我觉得我离答案很近了,但我不确定我的程序出了什么问题。我尝试通过方差结果的平方根来检查我的答案以获得标准差,但它们不匹配。
import java.util.Random;
public class Lab6 {
public static void main(String[] args) {
System.out.println("The Average Value is:"+avgValue());
System.out.println("The Standard Deviation is:"+stdDev());
System.out.println("The Variance is:"+Var());
}
public static int randomFill(){
Random rand = new Random();
int randomNum = rand.nextInt();
return randomNum;
}
private static int[] anArray;
public static int[] list() {
anArray = new int[100];
for(int i=0;i<anArray.length;i++)
{
anArray[i] = randomFill();
}
return anArray;
}
private static int sum;
public static int avgValue() {
int []a = list();
for (int e:a)
{
sum +=e;
}
int n=100;
sum=sum/n;
return sum;
}
private static int pwr;
public static int stdDev() {
int []b = list();
int dev=0;
for (int e:b)
{
dev=(e-sum)+dev;
}
pwr=(dev*dev)/99;
double root=Math.sqrt(pwr);
return pwr;
}
public static int Var() {
int c= pwr;
int opp=c*c;
return opp;
}
}
我已经有一段时间没有做统计了,但我可以指出你的 avgValue() 方法和你的 stdDev() 是针对两个不同的 int 数组计算的。当你调用 list() 时,你每次都会得到一个不同的整数数组并覆盖 anArray.
我建议在您的主要方法中创建数组,然后将其作为参数传递给其他方法。如果你想走你现在的路线,把 "int []b = list();" 改成 "int []b = anArray;" 就可以了。
总的来说,我认为您接下来可能想尝试研究方法参数和变量范围以改进您的 Java。继续开卡车;它变得更容易。
我记不清方差和标准差的公式,但是你的代码中与编程逻辑相关的一个错误是你在计算平均值时调用了一次 list()
,在计算标准差时调用了一次.
每次调用您的 list()
方法 returns 一个具有新随机值的新数组。因此,从本质上讲,即使您从代码中正确计算出标准差,您考虑的平均值(即 sum
变量)也对应于其他一些数组的平均值。
public static void main(String... args) {
int[] arr = createRandomArray(100);
System.out.printf(Locale.US, "The Average Value is: %.2f\n", mean(arr));
System.out.printf(Locale.US, "The Standard Deviation is: %.2f\n", standardDeviation(arr));
System.out.printf(Locale.US, "The Variance is: %.2f\n", variance(arr));
}
public static int[] createRandomArray(int total) {
int[] arr = new int[total];
Random random = new Random();
for (int i = 0; i < arr.length; i++)
arr[i] = random.nextInt(100);
return arr;
}
public static double mean(int[] arr) {
return (double)Arrays.stream(arr).sum() / arr.length;
}
public static double standardDeviation(int[] arr) {
double mean = mean(arr);
double sum = IntStream.range(0, arr.length)
.boxed()
.map(i -> Math.pow(arr[i] - mean, 2))
.mapToDouble(d -> d)
.sum();
return Math.sqrt(sum / arr.length);
}
public static double variance(int[] arr) {
return Math.pow(standardDeviation(arr), 2);
}