繁体   English   中英

索引超出范围错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM