索引越界错误

时间:2014-04-22 05:09:48

标签: java loops indexoutofboundsexception

我的代码遇到问题。我可以告诉为什么我得到一个索引超出范围的错误。此代码假设将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");
}

这是堆栈跟踪吗?

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:3     在test.test.main(test.java:51)

错误在此行list[position] = byteAdd[t];

2 个答案:

答案 0 :(得分:1)

您的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

答案 1 :(得分:0)

位置++在同一循环中的两个不同位置将在某一点导致其自身的值高于数组长度。因此,当您尝试将其用作循环的索引时,如果您正在使用该位置值来索引超出范围的数组索引,则可能抛出一个INDEXOUTOFBOUNDS异常。因此你可能想做: 在使用之前检查位置的值(如果它小于数组长度)或改变逻辑。如果您能够更清楚地了解自己的目标,我们可以提供帮助。