我正试图编写一个计算加权中值的程序,但有一个小问题我无法解决。
要找到加权中值,您必须将每个权重除以和,然后将其与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语句。

最佳答案

w数组和sum变量中的元素都是ints,因此当执行/操作时,实际上是在执行integer division-也就是说,只保留除法的“整个”部分,在本例中始终是0
将其中一个操作数定义为double将使java使用浮点除法,并解决您的问题。例如。:

double sum = Arrays.stream(w).sum();

10-04 19:59