[英]Index out of bounds error
我的代码有问题。 我可以说出为什么我的索引超出了错误范围。 假定此代码将2个字节的数组合并为一个。 根据“ list [position] = byteAdd [t];” 但我不知道怎么了。 这些数组以200字节大小初始化。
Scanner input = new Scanner(System.in);
System.out.println("Enter a web Address");
String net = input.nextLine();
String nets [] = net.split("\\.");
byte[] length = new byte [200];
byte[] byteAdd= new byte[200];
int bytelength = byteAdd.length*2;
byte[] list = new byte [200];
for (int i = 0 ; i<nets.length; i++ )
{
length[i]= (byte)(double) ( nets[i].length());
System.out.println(length[i]);
}
for (int i = 0 ; i<nets.length; i++ )
{
byteAdd = nets[i].getBytes();
}
int position= 0 , max= 0;
for (int i = 0 ; i<bytelength; i++)
{
list[position]=length[i];
position++;
for (int t = 0 ; t<length[i]; t++)
{
list[position] = byteAdd[t];
System.out.println(t+" "+length[i]);
System.out.println("Array lenght" + list.length);
//System.out.println(t+"inner" + position);
position++;
}
//System.out.println(i+"outter");
}
这是stacktrace吗?
线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:在test.test.main(test.java:51)为3
错误在此行上list[position] = byteAdd[t];
您的list = new byte [200];
声明大小为200
列表
bytelength
长度为200*2
= 400
所以当你说
for (int i = 0 ; i<bytelength; i++)
这意味着
for (int i = 0 ; i<400; i++) //whereas all array is limited to size 200 and that's throwing exception!
因此,在您的增量指针position++
,该值上升到399,而数组大小限制为200
所以list[position]
上升到list[201-400] // should be truncated at 200
同一循环中两个不同位置的position ++有时会导致其值大于数组长度。 因此,当尝试将其用作循环的索引时,当您使用该位置值对超出范围的数组索引进行索引时,可能会引发INDEXOUTOFBOUNDS异常。 因此,您可能需要执行以下操作:在使用位置值之前检查位置的值(如果它小于数组长度),或者更改逻辑。 如果您可以更清楚地了解自己要做什么,我们可以为您提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.