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