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は aString[]で、配列の長さを使用してチェックしました:

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

が0以上で、arayの長さよりも短いtempreload場合にのみ、インデックスの要素にアクセスできます。tempreloadしたがって、次のことを確認してください。

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

tempreloadとはいえ、エンドユーザーが入力した値でない限り、これらの条件を満たさない場合は、プログラムに以前にバグがあったことを意味します。バグの症状ではなく、バグの原因を修正してください。

于 2013-02-11T13:37:33.803 に答える