Я пытаюсь получить медианную длину из моего массива. Я использую следующий код, но я получаю ошибки. Я не знаю, почему я получаю эти ошибки.Получить медиану от массива
int middleSlot = list.length/2;
list[middleSlot];
Я пытаюсь получить медианную длину из моего массива. Я использую следующий код, но я получаю ошибки. Я не знаю, почему я получаю эти ошибки.Получить медиану от массива
int middleSlot = list.length/2;
list[middleSlot];
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;
}
Для медианного метода; Что делать, если массивы являются хэш-множеством? Будет ли он игнорировать его и все еще запустить метод? – user3078406
Как бы вы назвали этот метод главным? например, если я вызываю метод, который возвращает void, я бы использовал «myMethod();» Как бы вы назвали этот метод для запуска? Возможно, например: «getMedian (double, list)»; ?? – user3078406
> ИСПОЛЬЗОВАНИЕ будет: 'double answer = getMean (list);' – Petro
Чтобы получить элемент в середине вы можете захотеть сделать что-то
int middleSlot = list.size()/2;
int counter =0 ;
TypeOfList middleElement=null;
for(TypeOfList eachElement: list.values) {
if(counter == middleSlot) {
middleElement= eachElement; break;
}
counter++;
}
HashSet хранится с использованием хэш-функции и ее не линейного распределения, как массив. Вы не можете достичь того, чего хотите, тем, что делаете. – StackFlowed
Является ли это списком или массивом? – Alboz
@Alboz Я считаю его HashSet в соответствии с вопросом. – StackFlowed