2013-02-11 3 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]) 

arrtime является String[] и я проверить используя длину массива:

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

+0

Вы могли бы предоставить немного больше информации о вашем коде. более конкретно, как определяется переменная tempreload? – Grimmy

ответ

5

Вы проверяете значение элемента массива, а не индекс. Если, вероятно, будет:

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

Вы можете получить доступ только к элементу по индексу tempreloadtempreload, если больше или равно 0 и меньше длины Арай. Поэтому проверить, что:

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

Тем не менее, если tempreload не является введенным значением конечного пользователя, если он не удовлетворяет эти условия, то это означает, что есть ошибка, прежде чем в вашей программе. Обязательно исправьте причину ошибки, а не ее симптом.

Смежные вопросы