【问题标题】:IndexOutOfBounds, but why?IndexOutOfBounds,但为什么呢?
【发布时间】:2013-05-11 20:12:37
【问题描述】:

我正在编写应用程序的代码,当我只输入 2 个数字时,我得到 indexoutofbounds Length=2 Index=2。为什么会这样/我该如何规避它? 这是我的代码:

        Arrays.sort(newNums);
        double median = 0;
        if(newNums.length%2!=0){
            median = (double) newNums[newNums.length/2];
        }else if(newNums.length%2==0){
            median = ( (double) newNums[newNums.length/2 + 1] + (double) newNums[newNums.length/2-1] )/2;
        }else{

        }
        String medianString = Double.toString(median);
        showDialog(medianString, type,"Median:");

【问题讨论】:

  • 数组索引从0开始
  • 基本 Java(和大多数语言)。指数从零开始。第一个项目的索引为零,第二个索引是一个到 index=length-

标签: java android indexing


【解决方案1】:

newNums.length/2 + 1 == 2 for newNums.lenght == 2

您可能不希望 + 1 将两个相邻索引上的值相加。

【讨论】:

    【解决方案2】:

    Java 中的数组索引从 0 开始。如果数组的大小为 2,则此表达式 newNums[newNums.length/2 + 1] 将抛出 ArrayIndexOutOfBoundsException

    【讨论】:

      【解决方案3】:

      错误是:

      median = ( (double) newNums[newNums.length/2 + 1] + (double) newNums[newNums.length/2-1] )/2;

      newNums.length == 2时,这将导致IndexOutOfBoundError

      此外,偶数长度数组的中位数是两个连续中间元素的平均值,但您的代码给出了 middle + 1middle - 1 元素的平均值。

      改用这个:

      median = ( (double) newNums[newNums.length/2] + (double) newNums[newNums.length/2-1] )/2;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 2016-06-29
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多