我正在写一个应用程序的代码,当我只输入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:");
答案 0 :(得分:0)
Java中的数组索引从0开始。如果数组的大小为2,则表达式newNums[newNums.length/2 + 1]
将抛出ArrayIndexOutOfBoundsException
。
答案 1 :(得分:0)
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 + 1
和middle - 1
元素的平均值。
相反,请使用:
median = ( (double) newNums[newNums.length/2] + (double) newNums[newNums.length/2-1] )/2;