簡體   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