【问题标题】:Trying to calculate quartiles but get java.lang.ArrayIndexOutOfBoundsException试图计算四分位数但得到 java.lang.ArrayIndexOutOfBoundsException
【发布时间】:2020-07-08 02:56:25
【问题描述】:
我正在尝试在 java (Android Studio) 中计算数组的三个四分位数(上、中和下)但是使用下面的代码我得到了这个错误:java.lang.ArrayIndexOutOfBoundsException: length=1; index=-1 在第 9 行。这是因为我尝试对长度变量进行一些操作,但错误。此外,如果有人有更好的解决方案,或者关于如何计算 java 数组中上、中、下四分位数的提示,将不胜感激。
static double getLQ(double[] val) {
Arrays.sort(val);
int length = val.length;
double LQ = 0;
if(length % 2 != 0) {
LQ = val[length / 4] + val[length / 2 - 1] / 2;
} else {
LQ = val[length / 4];
}
return LQ;
}
【问题讨论】:
标签:
java
arrays
algorithm
math
statistics
【解决方案1】:
在数学上,当元素的数量小于 4 时,我们无法找到四分位数。因此我们应该首先处理这种情况。另一件事是数组索引从零开始,我们需要使用括号按照我们期望的顺序进行计算。然后 if-else 块将如下所示。
if (length < 4) {
LQ = 0;
} else if(length % 2 != 0) {
LQ = (val[(length / 4) - 1] + val[length / 4]) / 2;
} else {
LQ = val[(length / 4) - 1];
}
【解决方案2】:
如果只有一个元素,则length / 2 解析为0(因为它被剪切为int)并且length / 2 - 1 解析为-1。数组索引从 0 开始:
if (length == 1) {
LQ = val[0];
} else if(length % 2 != 0) {
LQ = val[length / 4] + val[length / 2 - 1] / 2;
} else {
LQ = val[length / 4];
}
还需要额外检查数组是否为空。