我正试图编写一个计算加权中值的程序,但有一个小问题我无法解决。
要找到加权中值,您必须将每个权重除以和,然后将其与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
s,因此当执行/
操作时,实际上是在执行integer division-也就是说,只保留除法的“整个”部分,在本例中始终是0
。
将其中一个操作数定义为double
将使java使用浮点除法,并解决您的问题。例如。:
double sum = Arrays.stream(w).sum();