gpt4 book ai didi

java - java中的加权中位数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:53:11 25 4
gpt4 key购买 nike

我正在尝试编写一个程序来计算加权中位数,但我遇到了一个我无法解决的小问题。要找到加权中位数,您必须将每个权重除以总和,然后将其与 0.5 进行比较,如果大于 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 变量中的元素都是int,所以当执行/ 您实际上正在执行的操作 integer division - 即,您只保留除法的“整体”部分,在本例中始终为 0

将操作数之一定义为 double 将使 Java 使用浮点除法,并解决您的问题。例如:

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

关于java - java中的加权中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53571935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com