2014-04-02 73 views
3

我有此錯誤:java.lang.ArrayIndexOutOfBoundsException:length = 4;索引= 4長度數組

04-02 11:03:57.922: E/AndroidRuntime(18952): FATAL EXCEPTION: main 
04-02 11:03:57.922: E/AndroidRuntime(18952): java.lang.ArrayIndexOutOfBoundsException: length=4; index=4 
04-02 11:03:57.922: E/AndroidRuntime(18952): at it.nad.cartellecliniche.fragment.SegmentoAnterioreFragment.onTaskComplete(SegmentoAnterioreFragment.java:471) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at it.nad.cartellecliniche.asynctask.LookupTask.onPostExecute(LookupTask.java:279) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at it.nad.cartellecliniche.asynctask.LookupTask.onPostExecute(LookupTask.java:1) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at android.os.AsyncTask.finish(AsyncTask.java:631) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at android.os.Looper.loop(Looper.java:137) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at android.app.ActivityThread.main(ActivityThread.java:5414) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at java.lang.reflect.Method.invokeNative(Native Method) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at java.lang.reflect.Method.invoke(Method.java:525) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
04-02 11:03:57.922: E/AndroidRuntime(18952): at dalvik.system.NativeStart.main(Native Method) 

這是代碼:

else if (typeTask.equals("LookupSegmentoAnteriore")) { 

      switch (resultOperation) { 
       case 200: { 
        Object[] lista = (Object[]) output[2]; 

        listaBulbo = (String[])lista[0]; 
        Arrays.sort(listaBulbo); 
        listaApparatoLacrimale = (String[])lista[1]; 
        Arrays.sort(listaApparatoLacrimale); 
        listaPalpebre = (String[])lista[2]; 
        Arrays.sort(listaPalpebre); 
        listaCongiuntiva = (String[])lista[3]; 
        Arrays.sort(listaCongiuntiva); 
        listaCornea = (String[])lista[4]; 
        Arrays.sort(listaCornea); 
        listaAngolo = (String[])lista[5]; 
        Arrays.sort(listaAngolo); 
        listaCamera_anteriore = (String[])lista[6]; 
        Arrays.sort(listaCamera_anteriore); 
        listaIride = (String[])lista[7]; 
        Arrays.sort(listaIride); 
        listaPupilla = (String[])lista[8]; 
        Arrays.sort(listaPupilla); 
        listaCristallino = (String[])lista[9]; 
        Arrays.sort(listaCristallino); 
        break; 
       } 
      } 
     } 

我已經添加了新的元件,以該列表從起始

listaCornea = (String[])lista[4]; 
Arrays.sort(listaCornea); 

發送至:

listaCristallino = (String[])lista[9]; 
Arrays.sort(listaCristallino); 

有人可以幫我解決這個問題嗎?我不知道如何管理陣列長度問題。我只是將新元素添加到列表中,但我不知道這是否是正確的形式。我需要調整我的數組大小嗎?我該怎麼做?

非常感謝

+0

你不能調整一個'array' – Baby

+3

'長度= 4;索引= 4長度數組「 - 數組索引是基於** 0的**。對於** length = 4 **的數組,索引範圍是** 0,...,3 **。索引= 4是**超出範圍**。 –

+0

您不能調整數組的大小,您可以改爲使用[ArrayList](http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html)。 –

回答

2

問題是你的陣列可以宣佈只有4間客房,這意味着你可以訪問的3 最大指數,但在上面的代碼中你要訪問4索引,那麼它會抱怨,你的指數綁定進來,你的長度是4,

你應該使用ArrayList而不是數組,因爲Array聲明後不能調整大小, 但你可以添加任意數量的對象到arraylist。

ArrayList<Object> lista=new ArrayList<Object>(); 
1

數組索引超出限制例外來自當您嘗試訪問您的數組中不可用的索引。

您已指定。 Object[] lista = (Object[]) output[2];

這意味着你有兩個元素。第一個是lista[0],第二個是lista[1]

現在您正在訪問lista[2]。這意味着您嘗試訪問您的Objeact[] lista中實際不可用的第三個元素。所以它給出例外SegmentoAnterioreFragment.onTaskComplete(SegmentoAnterioreFragment.java:471)

Arraylist是動態arraylist。你可以直接添加和刪除元素。您不需要指定元素限制。

可以使用此數組列表,而不是對象陣列

ArrayList<Object> lista=new ArrayList<Object>();