Как найти среднее значение, медиану, моду и диапазон из входного файла?

Мне нужно найти среднее значение, медиану, моду и диапазон из входного файла.

[входной файл имеет номера {60,75,53,49,92,71}]

Я не знаю, как распечатать расчеты из диапазона или рассчитать моду.

Это довольно плохо, я очень новичок в Java.

Было бы здорово, если бы кто-нибудь мог помочь мне с этим.

import java.io.*;
import java.util.*;

public class grades {

    public static double avg(double[] num) {
        double total = 0;
        int j = 0;
        for (; j < num.length; j++) {
            total += num[j];
        }
        return (total / j);
    }

    public double getRange(double[] numberList) {
        double initMin = numberList[0];
        double initMax = numberList[0];
        for (int i = 1; i <= numberList.length; i++) {
            if (numberList[i] < initMin) initMin = numberList[i];
            if (numberList[i] > initMax) initMax = numberList[i];
            double range = initMax - initMin;

        }
        return range;
    }

    public static void main(String[] args) throws IOException {
        double[] num = new double[12];
        File inFile = new File("data.txt");
        Scanner in = new Scanner(inFile);
        for (int i = 0; i < num.length && in.hasNext(); i++) {
            num[i] = in.nextDouble();
            // System.out.println(num[i]); 
        }

        double avg = grades.avg(num);
        System.out.println("Arithmetic Mean = " + avg);
        System.out.printf("Median = %.2f%n", grades.getMedian(num));
        System.out.println("Range = " + range);


    }

    public static double getMedian(double[] num) {
        int pos = (int) num.length / 2;
        return num[pos];
    } 

}

person tasuminagorashi    schedule 19.02.2016    source источник
comment
Расскажите нам немного больше о том, что происходит? Какие ошибки вы видите? Точные проблемы. Почему трудно распечатать расчеты?   -  person Thihara    schedule 19.02.2016
comment
Диапазон вообще не распечатывается, а средний расчет по какой-то причине неверен. Он выводит 49,88883 как среднее значение, и это неправильно.   -  person tasuminagorashi    schedule 19.02.2016


Ответы (2)


Я не знаю, как распечатать расчеты из диапазона или рассчитать моду.

Вы уже написали функцию для вычисления Range. Вот как вы можете распечатать Range.

System.out.println("Range = " + getRange(num));

Вот небольшой фрагмент кода для расчета режима:

public static double calculateMode(final double[] numberList) {
    double[] cnts = new double[numberList.length];
    double mode = 0, max = 0;

    for (int i = 0; i < numberList.length; i++) {
        /* Update Count Counter */
        cnts[numberList[i]]++;
        /* Check */
        if (max < cnts[numberList[i]]) {
            /* Update Max */
            max = cnts[numberList[i]];
            /* Update Mode */
            mode = numberList[i];
        }
    }
    /* Return Result */
    return mode;
}
person user2004685    schedule 19.02.2016

попробуйте отсортировать элемент в массив. Это даст следующие результаты:

    [49,53,60,71,75,92]

предположим, вы сохранили его в массиве A.

int arrLength=A.length();
for(i=0,sum=0;i<arrlength;i++)
    sum=sum+A[i]
mean=sum/arrLength;
median=A[arrLength/2]

Я думаю, вы не отсортировали элементы, прежде чем найти медиану. Сделайте то же самое, чтобы рассчитать диапазон. Я чувствую, что это будет проще.

person Surachit Sarkar    schedule 19.02.2016
comment
Да, да, я сделал. Спасибо, парни - person tasuminagorashi; 22.02.2016
comment
ну все в порядке... вы можете выбрать любой ответ как лучший ответ (или не можете выбрать), чтобы получить очки - person Surachit Sarkar; 25.02.2016