2014-10-07 2 views
0

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

int middleSlot = list.length/2; 
    list[middleSlot]; 
+0

HashSet хранится с использованием хэш-функции и ее не линейного распределения, как массив. Вы не можете достичь того, чего хотите, тем, что делаете. – StackFlowed

+0

Является ли это списком или массивом? – Alboz

+0

@Alboz Я считаю его HashSet в соответствии с вопросом. – StackFlowed

ответ

0

Apache Commons Math это сделает.

http://commons.apache.org/proper/commons-math/userguide/stat.html#a1.3_Frequency_distributions

ИЛИ: Mean, Median, Mode, Range - Java

ИСПОЛЬЗОВАНИЕ будет: double answer = getMean(list);

getMean()

public double getMean(double[] numberList) { 
    double total; 
    for (double d: numberList) { 
     total += d; 
    } 
    return total/(numberList.length); 
} 

getMedian()

This method is going on the assumption that the passed array is already sorted (i.e. {1,2,3,...}). 

public double getMedian(double[] numberList) { 
    int factor = numberList.length - 1; 
    double[] first = new double[(double) factor/2]; 
    double[] last = new double[first.length]; 
    double[] middleNumbers = new double[1]; 
    for (int i = 0; i < first.length; i++) { 
     first[i] = numbersList[i]; 
    } 
    for (int i = numberList.length; i > last.length; i--) { 
     last[i] = numbersList[i]; 
    } 
    for (int i = 0; i <= numberList.length; i++) { 
     if (numberList[i] != first[i] || numberList[i] != last[i]) middleNumbers[i] = numberList[i]; 
    } 
    if (numberList.length % 2 == 0) { 
     double total = middleNumbers[0] + middleNumbers[1]; 
     return total/2; 
    } else { 
     return middleNumbers[0]; 
    } 
} 

getMode()

public double getMode(double[] numberList) { 
    HashMap<Double,Double> freqs = new HashMap<Double,Double>(); 
    for (double d: numberList) { 
     Double freq = freqs.get(d); 
     freqs.put(d, (freq == null ? 1 : freq + 1)); 
    } 
    double mode = 0; 
    double maxFreq = 0;  
    for (Map.Entry<Double,Doubler> entry : freqs.entrySet()) {  
     double freq = entry.getValue(); 
     if (freq > maxFreq) { 
      maxFreq = freq; 
      mode = entry.getKey(); 
     } 
    }  
    return mode; 
} 

getRange()

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]; 
    } 
    return initMax - initMin; 
}  
+0

Для медианного метода; Что делать, если массивы являются хэш-множеством? Будет ли он игнорировать его и все еще запустить метод? – user3078406

+0

Как бы вы назвали этот метод главным? например, если я вызываю метод, который возвращает void, я бы использовал «myMethod();» Как бы вы назвали этот метод для запуска? Возможно, например: «getMedian (double, list)»; ?? – user3078406

+0

> ИСПОЛЬЗОВАНИЕ будет: 'double answer = getMean (list);' – Petro

0

Чтобы получить элемент в середине вы можете захотеть сделать что-то

int middleSlot = list.size()/2; 
int counter =0 ; 
TypeOfList middleElement=null; 
for(TypeOfList eachElement: list.values) { 
    if(counter == middleSlot) { 
     middleElement= eachElement; break; 
    } 
    counter++; 
} 
Смежные вопросы