2013-05-11 36 views
-1

我正在寫應用程序的代碼,當我只輸入2個數字時,我得到indexoutofbounds長度= 2索引= 2。爲什麼這個/我如何繞過它? 這是我的代碼:IndexOutOfBounds,但爲什麼?

 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 – 2013-05-11 20:14:03

+0

基本的Java(和大多數語言)數組索引開始。指數基於零。第一個項目的索引爲零,第二個索引爲1到index = length- – Simon 2013-05-11 20:15:00

回答

0

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

您可能不希望+ 1那裏的索引相鄰的索引上的兩個值。

0

在Java數組索引從0開始這個表達式newNums[newNums.length/2 + 1]將拋出ArrayIndexOutOfBoundsException如果數組的大小是2

0

的誤差修改爲:

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

newNums.length == 2,這將導致IndexOutOfBoundError

而且,甚至長度陣列的中位數爲2種連續中間元素的平均,但你的代碼給出的middle + 1middle - 1和元素的平均值。

相反,使用這樣的:

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