【问题标题】: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];
      }
      

      还需要额外检查数组是否为空。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 2021-01-07
        • 1970-01-01
        • 2020-11-26
        • 1970-01-01
        • 2013-01-09
        • 2021-12-26
        相关资源
        最近更新 更多