Я сделал простую программу, которая вычисляет среднее и среднее значение заданного массива из командной строки.Неожиданный результат при попытке рассчитать среднюю и среднюю
import java.util.Arrays;
public class EdankJaya {
public static void main(String args[]) {
double sum = 0;
double d;
if(args.length < 1) {
System.out.println("Usage : java EdankJaya <Number1> <Number2> ..");
System.exit(1);
}
//Mean
for(String s : args) {
d = Double.parseDouble(s);
sum = sum+d;
}
double mean = sum/args.length;
System.out.println("Mean: " + mean);
//Median
Arrays.sort(args);
int med = args.length/2;
if((args.length % 2) == 0) {
double median1 = Double.parseDouble(args[med-1]);
double median2 = Double.parseDouble(args[med]);
System.out.println("Median :"+(median1+median2)/2);
} else {
double median = Double.parseDouble(args[med]);
System.out.println("Median :"+median);
}
}
}
Методика, что я используется для медианного значения является разделить на 2 args.length
и хранить его в med
. Если значение args.length
равно, это будет args[med-1]
+ args[med]
, без проблем для четного номера. И при нечетном args.length
значения, это будет просто args[med]
, который отлично работает на бумаге, так как целое не будет производить фракцию (11/2 будет 5), но вот что случилось:
Всё до тех пор, пока я не введет 1-10, значение вернется к результату при вводе 1-8 и 1-11 точно так же, как 1-7, и так далее. Что может быть проблемой здесь. Спасибо.
Arrays.sort (args); сортирует строки, а не двойные значения, поэтому ваши «2, 3, 4 ...» появятся после «11, 12 ...». Всегда, действительно всегда, преобразуйте данные в форму, подходящую для алгоритма, и только затем запустите alorigthms ... –
ах, так что 11 будет 1 + 1, 12 -> 1 + 2? –
Нет, это не так. Строки сортируются по подстрокам, требуемым для принятия решения, то есть сравнивая «1» и «2», «1» будет выглядеть до «2» по понятным причинам, сравнивая «11» и «2» java будет сравнивать подстроки 1 char первым и увидит, что «1» - до «2», чего будет достаточно; сравнивая «21» и «2», сравнение первых символов даст равенство, поэтому следующий будет рассмотрен, а затем до Java будет принято решение о том, что «» предшествует «1» или нет ... –