用于计算平均值和偏差几乎完全码

问题描述 投票:-1回答:2

我只是困惑如何存储用户的输入数字的数组。用户可以输入自己有多少数量要在阵列中,但它不要求数字本身。

import java.util.Scanner;

public class Exercise_0_2 {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

System.out.print("How many numbers: ");
int n = input.nextInt();

System.out.println("Enter  " + n + " numbers : ");
double[] numbers = new double[n];

//Call and print methods
System.out.println("Mean: " + mean(numbers, n));
System.out.println("Standard Deviation: " + deviation(numbers, n));

}
// Calculate Mean
public static double mean(double[] numbers, int n) {

    double sum = 0;

    for (int i = 0; i < n; i++) {
        sum += numbers[i];
    }
    double mean = sum / n;
    return mean;
    }
    //Calculate deviation from the mean
    public static double deviation(double[] numbers, int n) {

            double mean = mean(numbers, n);
            double sqSum = 0;
            for (int i = 0; i < n; i++) {
                sqSum += numbers[i] * numbers[i];
            }

                double variance = sqSum / n - mean * mean;
                double sd = Math.sqrt(variance);
                return sd;

    }
}
java mean standard-deviation
2个回答
1
投票

让我们从顶部走在错误。

    int arr[] = new int[(int) n];

此时n还没有宣布,所以你不能在这里使用它。只是arr的声明移到声明和从扫描仪读取n后。顺便考虑int键入ndouble并没有真正意义。

    System.out.println("Mean: " + mean);

如果这被认为是该方法mean一个电话,你需要把方法名称后括号和必需的参数中括号,如mean(arr)mean(arr)仍然无法工作,因为arr已键入int[]而该方法需要键入double[]。我不能告诉你正确的解决办法是什么在这里,因为我不知道你是否意味着外部或方法中读出的数字。外面的人似乎更自然的我。

    System.out.println("Enter" + n + " numbers: ");

因为它是在n方法的局部变量不能在这里使用的变量main。再说我不知道​​你需要它,如果你打算在其他地方阅读的数字,并通过填充阵列到方法。

        array[i] = input.nextDouble();

两个错误在这里:你不必叫array1数组变量。你可能意味着numbers,我不知道。而且,由于它是在input方法的局部变量(同样的问题与main以上),你不能在这里使用的变量n。任一声明它的静态字段,而不是,或者它作为参数传递到方法中。

deviation方法的错误是相似的,所以我不会重复。

因为据我所知,这应该是你的一个锻炼,我不打算为您解决和剥夺你的学习。我希望你得到一个或两个一步。

编辑

有你的问题的编辑一些细微的改进。你似乎仍然没有来决定是否在mainmean阅读的数字?

    System.out.println("Mean: " + mean(numbers, n));

没有你的numbers方法声明的变量main(以下行同样的问题)。否则罚款。

        sum += a[i];

你可能意味着meanSumnumbers?或者,也许你的意思是声明,而不是summeanSum环以上for

有一个正确的花括号上面一行结束第一循环for后失踪。

    double dqDiff = 0;

简单的拼写错误:你指的是这个变量作为sqDiff以后,所以需要在此处的声明使用相同的拼写。

    return Math.sqrt(mean(number, n));

失踪s numbers。我不相信,数学的这个简单的版本是正确的。

请不要指望我能承担这个代码的任何更多轮。


0
投票

我可以建议先使用ArrayList代替array[]的,在这种情况下,你没有来表示数字的数量(n)和可以自由进入这么多的数字,只要你愿意。其次,使用try-catch块停止输入数字和计算的初始化。例如:

public class MeanAndDeviation {

public static void main(String[] args) {

    Scanner scn = new Scanner(System.in);

    System.out.println("Enter the numbers then press any letter to calculate Mean and Sd");
    /*Use an ArrayList to freely enter so much numbers as you need*/
    ArrayList <Double> arr = new ArrayList <>();
    /*Use try-catch block to start calculations by entering any letter*/
    try {
        while (scn.hasNext()) {
            double i = scn.nextDouble();
            arr.add(i);
        }
    }
    /*Use catch (Exception e) to catch any type of exceptions*/
    catch (Exception e) {}

    System.out.println(arr + "\nMean: " + mean(arr) + 
            "\nStandard Deviation: " + deviation(arr));
    }

private static double mean(ArrayList<Double> arr) {
    double sum = 0;
    for (int i = 0; i < arr.size(); i++) {
        sum += arr.get(i);}
    double mean = sum/arr.size();
    return mean;       
}

private static double deviation (ArrayList<Double> arr) {
    double sumOfDiff = 0;
    for (int i = 0; i < arr.size(); i++) {
        sumOfDiff += Math.pow(arr.get(i) - mean(arr), 2);
    }
    double deviation = Math.sqrt(sumOfDiff/arr.size());
    return deviation;
}
}
© www.soinside.com 2019 - 2024. All rights reserved.