-1

我正在编写一个应用程序的代码,当我只输入 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:");
4

3 回答 3

0

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

于 2013-05-11T20:14:23.013 回答
0

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

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

于 2013-05-11T20:15:03.277 回答
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;

于 2013-05-11T20:15:11.677 回答