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);


                                }
                            }
                        }
                }

我究竟做错了什么?

4

2 回答 2

5

您正在检查数组元素值,而不是索引。应该是:

int arrtimelen = arrtime.length;
if (tempreload < arrtimelen)                                           
{                                            
    g = Integer.parseInt (arrtime [tempreload]);
}
于 2013-02-11T13:36:33.670 回答
0

tempreload如果索引tempreload大于或等于 0 且小于数组的长度,则只能访问索引处的元素。所以检查一下:

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

也就是说,除非tempreload是最终用户输入的值,如果它不满足这些条件,则意味着您的程序之前存在错误。确保修复错误的原因,而不是其症状。

于 2013-02-11T13:37:33.803 回答