2013-02-11 21 views
1

我得到以下錯誤檢查特定數組索引存在或不

java.lang.ArrayIndexOutOfBoundsException: 6 
    at data.connect(data.java:282) 
    at data.<init>(data.java:78) 
    at data.main(data.java:549) 

在282線我訪問

int g = Integer.parseInt(arrtime[tempreload]) 

arrtimeString[],我也使用數組長度檢查:

int arrtimelen = arrtime.length - 1; 
if(Integer.parseInt(arrtime[tempreload]) < arrtimelen) { 
    g = Integer.parseInt(arrtime[tempreload]); 
} 

我的程序流程是

int arrpagenolen =(arrpageno.length)-1; int arrtimelen =(arrtime.length)-1;

   String finalarr[][]=new String[3000000][5]; 
       int tempreload=0; 

       int totalreload=0; 
       /*System.out.println("Length="+arrpagenolen); 
       for(int s=0;s<arrpagenolen;s++) 
       { 
        System.out.println(s+"="+arrpageno[s]); 
       }*/ 
       for(int n=0;n<arrpagenolen;n++) 
       { 
         if(n==0) 
         { 
          totalreload=Integer.parseInt(arrreload[n]); 
          if(totalreload==1) 
          { 
           finalarr[finalvalue][1]=arrpageno[n]; 
           finalarr[finalvalue][2]=arrreload[n]; 
           finalarr[finalvalue][3]=arrtime[tempreload]; 
           finalarr[finalvalue][4]=arrreferal[n]; 

          }else 
          { 
           for(int y=0;y<totalreload;y++) 
           { 
            //System.out.println(finalarr[finalvalue][3]); 
            if(finalarr[finalvalue][3]!=null) 
            { 
             int x=Integer.parseInt(finalarr[finalvalue][3]); 
             int g; 
             if(Integer.parseInt(arrtime[tempreload]) < arrtimelen) 
             { 
             g=Integer.parseInt(arrtime[tempreload]); 
             } 
             else 
             { 
             g=0; 
             } 
             int temp=x+g; 
             finalarr[finalvalue][3]=Integer.toString(temp); 
            }else 
            { 
             if(Integer.parseInt(arrtime[tempreload]) < arrtimelen) 
             { 
             finalarr[finalvalue][3]=arrtime[tempreload]; 
             }else 
             { 
             int tmprl=0; 
             arrtime[tempreload]=Integer.toString(tmprl); 
             }          
            } 
            tempreload++; 
           } 
           finalarr[finalvalue][1]=arrpageno[n]; 
           finalarr[finalvalue][2]=arrreload[n]; 
           finalarr[finalvalue][4]=arrreferal[n]; 

          } 
          finalvalue++; 

         } 
         else 
         { 
          int flag=0; 
          int selectedindex=0; 
          for(int j=0;j<finalvalue;j++) 
          { 
           int temp1=Integer.parseInt(finalarr[j][1]); 
           int temp2=Integer.parseInt(arrpageno[n]); 
           if(temp1==temp2) 
           { 
            flag=1; 
            selectedindex=j; 
           } 
          } 

          if(flag==0) 
          { 
           totalreload=Integer.parseInt(arrreload[n]); 
           if(totalreload==1) 
           { 

            finalarr[finalvalue][1]=arrpageno[n]; 
            finalarr[finalvalue][2]=arrreload[n]; 
            finalarr[finalvalue][3]=arrtime[tempreload]; 
            finalarr[finalvalue][4]=arrreferal[n]; 
           } 
           else 
           { 
            for(int y=0;y<totalreload;y++) 
            { 
             if(finalarr[finalvalue][3]!=null) 
             { 
              int x=Integer.parseInt(finalarr[finalvalue][3]); 
              int g=Integer.parseInt(arrtime[tempreload]); 
              System.out.println("g value="+g); 
              int temp3=x+g; 
              System.out.println("temp3 value="+temp3); 
              finalarr[finalvalue][3]=Integer.toString(temp3); 
             }else 
             { 
              finalarr[finalvalue][3]=arrtime[tempreload]; 
             } 
             //finalarr[finalvalue][3]=finalarr[finalvalue][3]+arrtime[tempreload]; 
             tempreload++; 
            } 

            finalarr[finalvalue][1]=arrpageno[n]; 
            finalarr[finalvalue][2]=arrreload[n]; 
            finalarr[finalvalue][4]=arrreferal[n]; 
           } 
           finalvalue++; 
          } 
          else 
          { 
           totalreload=Integer.parseInt(arrreload[n]); 
           if(totalreload==1) 
           { 
            int x=Integer.parseInt(finalarr[selectedindex][2]); 
            int g=Integer.parseInt(arrreload[n]); 
            int temp4=x+g; 
            finalarr[selectedindex][2]=Integer.toString(temp4); 

            int a=Integer.parseInt(finalarr[selectedindex][3]); 
            //System.out.println("reload 1 previous value "+a); 
            int b=Integer.parseInt(arrtime[tempreload]); 
            //System.out.println("reload 1 new value "+b); 
            int temp5=a+b; 
            //System.out.println("reload 1 temp value "+temp5); 
            finalarr[selectedindex][3]=Integer.toString(temp5); 


           } 
           else    
           { 
            for(int y=0;y<totalreload;y++) 
            { 

              int x=Integer.parseInt(finalarr[selectedindex][3]); 
              //System.out.println("else previous value "+x); 
              int g; 
              if(arrtime[tempreload]!=null) 
              { 
              g=Integer.parseInt(arrtime[tempreload]); 
              } 
              //System.out.println("else new value "+g); 
              else 
              { 
              g=0; 
              } 
              int temp6 = x+g; 
              //System.out.println("else temp value "+temp6); 
              finalarr[selectedindex][3]=Integer.toString(temp6); 
              tempreload++; 
            } 
            int p=Integer.parseInt(finalarr[selectedindex][2]); 
            int q=Integer.parseInt(arrreload[n]); 
            int temp7=p+q; 
            finalarr[selectedindex][2]=Integer.toString(temp7); 


           } 
          } 
         } 
       } 

我在做什麼錯?

+2

'arrtime [tempreload]':'tempreload'大於或等於'arrtime'的長度。您需要在嘗試訪問之前檢查它。 – ogzd 2013-02-11 13:35:18

+0

你能否提供更多關於你的代碼的輸入。更具體地說是如何定義變量tempreload? – Grimmy 2013-02-11 13:36:06

回答

5

您正在檢查數組元素值,而不是索引。也許應該是:

int arrtimelen = arrtime.length; 
if (tempreload < arrtimelen)           
{            
    g = Integer.parseInt (arrtime [tempreload]); 
} 
0

只能在指數tempreload訪問元素,如果tempreload比阿雷的長度大於或等於0且小於。所以檢查:

if (tempreload >= 0 && tempreload < arrtime.length) { 
    int g = Integer.parseInt(arrtime[tempreload]) 
    ... 

也就是說,除非tempreload是由最終用戶輸入的值,如果沒有滿足這些條件,就意味着之前有一個bug在你的程序。確保修復錯誤的原因,而不是它的症狀。