Как создать одномерный массив, содержащий 100 случайных целых чисел и найти среднее значение, стандартное отклонение и дисперсию? - PullRequest
0 голосов
/ 07 декабря 2018

Я пытался сделать это, но мне кажется, что я делаю что-то не так.Я программист начального уровня, и мне действительно нужна помощь в этом.Я чувствую, что близок к ответу, но я не уверен, что не так с моей программой.Я пытаюсь проверить свой ответ квадратным корнем из результата Разница, чтобы получить стандартное отклонение, но они не совпадают.

    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;
    }

    }

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

Я неправильно помню формулы дисперсии и стандартного отклонения, но одна ошибка, связанная с логикой программирования в вашем коде, заключается в том, что вы вызывали list() один раз при вычислении среднего значения и один раз при вычислении стандартного отклонения.

Каждый вызов вашего метода list() возвращает новый массив с новыми случайными значениями.Таким образом, по сути, даже если вы правильно рассчитаете стандартное отклонение из кода, среднее значение, которое вы рассматриваете (т.е. переменная sum), соответствует среднему значению некоторого другого массива.

0 голосов
/ 08 декабря 2018
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);
}
0 голосов
/ 08 декабря 2018

Прошло много времени с тех пор, как я выполнил статистику, но я могу указать, что ваш метод avgValue () и ваш stdDev () вычисляются для двух разных массивов int.Когда вы вызываете list (), вы каждый раз получаете другой массив целых чисел и перезаписываете массив.

Я бы порекомендовал создать массив внутри вашего основного метода и затем передать его в качестве параметра другим методам.Если вы хотите идти по маршруту, на котором вы находитесь, измените "int [] b = list ();"to "int [] b = anArray;"и у вас все должно быть в порядке.

В целом, я думаю, что вы можете попробовать изучить параметры метода и переменную область видимости рядом, чтобы улучшить вашу Java.Держись на грузовике;становится легче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...