IndexOutOfBounds,但为什么呢?

时间:2013-05-11 20:12:38

标签: java android indexing

我正在写一个应用程序的代码,当我只输入2个数字时,我得到indexoutofbounds长度= 2索引= 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:");

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

{p> newNums.length/2 + 1 == 2 newNums.lenght == 2

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

答案 2 :(得分:0)

错误是:

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;