Взвешенная медиана в Яве - PullRequest
       9

Взвешенная медиана в Яве

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

Я пытаюсь запрограммировать программу для вычисления средневзвешенного значения, но у меня есть небольшая проблема, которую я не могу решить.чтобы найти взвешенную медиану, вы должны разделить каждый вес на сумму, а затем сравнить его с 0,5, если больше означает, что найденная взвешенная медиана затем возвращает соответствующее значение x.вот пример:

x = [3,4,6,10]
w = [1,2,3,5]
1/11 > 1/2 ? no
1/11+ 2/11 > 1/2 ? no
1/11+ 2/11 + 3/11 > 1/2 ? yes

, затем верните 6, поскольку это соответствует 3

вот моя попытка:

    public static void main(String[] args) {
    int[] x = new int[] {3,4,6,10};
    int[] w = new int[] {1,2,3,5};
    int sum = Arrays.stream(w).sum();//11

    if ((w[0]/sum)>0.5){
        System.out.print("The weighted meadin is " + x[0]);
    }
    else if ((w[0]/sum)+(w[1]/sum)>0.5){
        System.out.print("The weighted meadin is " + x[1]);
    }
    else if ((w[0]/sum)+(w[1]/sum)+(w[2]/sum)>0.5){
        System.out.print("The weighted meadin is " + x[2]);
    }
    else if ((w[0]/sum)+(w[1]/sum)+(w[2]/sum)+(w[3]/sum)>0.5){
        System.out.print("The weighted meadin is " + x[3]);
    }
    else{
        System.out.print("The weighted meadin not found");
    }
}

это всегда возвращает последний оператор else.

Ответы [ 2 ]

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

Все элементы в массиве w и переменной sum равны int с, поэтому при выполнении операции / вы фактически выполняете целочисленное деление - то есть высохраняя только «целую» часть деления, которая в данном случае всегда 0.

Определение одного из операндов как double заставит Java использовать деление с плавающей запятой и решит вашепроблема.Например:

double sum = Arrays.stream(w).sum();
0 голосов
/ 01 декабря 2018

Каждая используемая вами операция деления является целочисленным делением, поскольку оба операнда являются целыми числами.

Попробуйте сделать это делением с плавающей запятой.Например, можно переписать каждый w[0] / sum и т. П. В w[0] * 1.0 / sum.Другой способ - просто объявить переменную sum как double.

...