错误的中位数答案
Wrong Median Answer
问题:我在计算 arrayList
的中值时遇到问题
背景:所以我的 ArrayList 得到随机生成的值,我必须计算它的中值;我相信我的中值公式很好,但我在 ArrayList 中的 3 个值的中值答案是错误的。
对于三个值,它给出了错误的中位数。例如:
当数组列表具有以下值时:
193.5, 200.5, 239.8
那么程序只是简单地取前两个值的平均值并给出答案而不是去 200.5
public double getMedianB(){
Collections.sort(myDataB);
double middle = myDataB.size()/2;
if (myDataB.size()%2 == 1) {
middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 - 1))/2;
} else {
middle = myDataB.get(myDataB.size() / 2);
}
System.out.println("median:" + middle);
return middle;
}
你应该翻转你的条件:
以下条件检查项数是否为奇数。在那种情况下,您只需要一个中间值。
if (myDataB.size()%2 == 1) {
中位数的计算方式
- 按升序排列列表
- 如果列表中的项目数是奇数,则中间的数字是中位数
- 如果项目数是偶数,则将中间两个数相加再除以二,结果就是中位数
在你的代码中你有偶数和奇数切换的条件,所以正确的是如下
if (myDataB.size()%2 == 0) {
middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 + 1))/2;
} else {
middle = myDataB.get(myDataB.size() / 2);
}
为了获得中间值,您只需要获取中间值即可。而在您的示例中,您正在计算前两个值的某个平均值。
将代码更改为:
Collections.sort(myDataB);
double middle = myDataB.size()/2;
if (myDataB.size()%2 == 1) {
middle = (double)myDataB.get(myDataB.size()/2);
} else {
middle = (double) myDataB.get(myDataB.size() / 2);
}
System.out.println("median:" + middle);
改变其他条件,无论你想在那里执行什么。
问题:我在计算 arrayList
的中值时遇到问题背景:所以我的 ArrayList 得到随机生成的值,我必须计算它的中值;我相信我的中值公式很好,但我在 ArrayList 中的 3 个值的中值答案是错误的。
对于三个值,它给出了错误的中位数。例如: 当数组列表具有以下值时: 193.5, 200.5, 239.8 那么程序只是简单地取前两个值的平均值并给出答案而不是去 200.5
public double getMedianB(){
Collections.sort(myDataB);
double middle = myDataB.size()/2;
if (myDataB.size()%2 == 1) {
middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 - 1))/2;
} else {
middle = myDataB.get(myDataB.size() / 2);
}
System.out.println("median:" + middle);
return middle;
}
你应该翻转你的条件:
以下条件检查项数是否为奇数。在那种情况下,您只需要一个中间值。
if (myDataB.size()%2 == 1) {
中位数的计算方式
- 按升序排列列表
- 如果列表中的项目数是奇数,则中间的数字是中位数
- 如果项目数是偶数,则将中间两个数相加再除以二,结果就是中位数
在你的代码中你有偶数和奇数切换的条件,所以正确的是如下
if (myDataB.size()%2 == 0) {
middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 + 1))/2;
} else {
middle = myDataB.get(myDataB.size() / 2);
}
为了获得中间值,您只需要获取中间值即可。而在您的示例中,您正在计算前两个值的某个平均值。
将代码更改为:
Collections.sort(myDataB);
double middle = myDataB.size()/2;
if (myDataB.size()%2 == 1) {
middle = (double)myDataB.get(myDataB.size()/2);
} else {
middle = (double) myDataB.get(myDataB.size() / 2);
}
System.out.println("median:" + middle);
改变其他条件,无论你想在那里执行什么。