我收到以下错误
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);
}
}
}
}
我做错了什么?
答案 0 :(得分:5)
您正在检查数组元素值,而不是索引。应该是:
int arrtimelen = arrtime.length;
if (tempreload < arrtimelen)
{
g = Integer.parseInt (arrtime [tempreload]);
}
答案 1 :(得分:0)
如果tempreload
大于或等于0且小于aray的长度,则只能访问索引tempreload
处的元素。所以检查一下:
if (tempreload >= 0 && tempreload < arrtime.length) {
int g = Integer.parseInt(arrtime[tempreload])
...
也就是说,除非tempreload
是最终用户输入的值,否则如果它不满足这些条件,则表示程序中存在错误。确保修复错误的原因,而不是其症状。