![](/img/trans.png)
[英]I keep getting ArrayIndexOutOfBoundsException and I have no idea why
[英]ArrayIndexOutOfBoundsException for my PrintList function and I have no idea why
我正在編寫一個非常簡單的程序,當用戶達到當前數組的限制時,該程序會自動擴展數組。
問題是,當我運行PrintList方法時,我得到了java.lang.ArrayIndexOutOfBoundsException,但我真的不知道為什么。 如果我使用一個比數組大的隨機數(例如500),它可以很好地工作,但是如果我使用
for (int i = 0; i < stringArray.length; i++)
要么
for (int i = 0; i <= stringArray.length; i++)
我收到一個令人討厭的例外。 我該如何處理?為什么要首先解決呢?
非常感謝你的幫助!
這是我程序的源代碼:
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int index = 0;
String[] randomString = new String[1];
while (index <= randomString.length) {
out.println("Enter your string");
String input = keyboard.next();
randomString[index] = input;
PrintArray(randomString);
index++;
if (index >= randomString.length) {
ExtendArray(randomString);
continue;
}
}
}
public static void ExtendArray(String[] stringArray) {
String[] secondArray = new String[stringArray.length * 2];
// Copy first array into second array
for (int i = 0; i < stringArray.length; i++) {
stringArray[i] = secondArray[i];
stringArray = secondArray;
}
}
public static void PrintArray(String[] stringArray) {
for (int i = 0; i < stringArray.length; i++) {
out.println(" " + stringArray[i]);
}
}
Java無法在您嘗試使用的方法中工作。 Java中的所有內容均按值傳遞,除非它是對象中的數據點。 您嘗試使用的是通過引用傳遞,這在Java中是不可能的。
您試圖做的是一個已經存在的稱為Vector的數據結構: http : //docs.oracle.com/javase/7/docs/api/java/util/Vector.html
我建議這樣做:(由於我當前的PC沒有開發工具,所以不確定是否可以正常工作):
public static String[] ExtendArray(String[] stringArray) {
String[] secondArray = new String[stringArray.length * 2];
// Copy first array into second array
for (int i = 0; i < stringArray.length; i++) {
secondArray[i] = stringArray[i];
}
return secondArray;
}
然后在main中這樣稱呼它:
randomString = ExtendArray(randomString);
關於向量,這是它在Vector類中的工作方式:
public void incrementCount(int count){
int increment = (count * 2);
Object newElementData [] = new Object[increment];
for(int i = 0; i < count; i++)
{
newElementData[i] = elementData[i];
}
elementData = new Object[increment];
elementData = newElementData;
}
在這種情況下,elementData是原始數組,newElementData是一個臨時數組,其作用是增大邊界。
您無法在您的PrintArray方法上得到錯誤,而之前卻在行上得到了錯誤!
randomString[index] = input;
因為如果你這樣做
index <= randomString.length
最后一次迭代超出范圍,長度為10的字符串的值在0-9上。 您必須將while周期更改為
index < randomString.length
另外,您的ExtendArray方法不起作用!
您應該將randomString
數組換成長度為兩倍的新數組。 您創建了一個新數組並將舊數組的內容復制到新數組,但是對新數組不執行任何操作。
我想您希望ExtendArray
方法返回新數組,並將randomString
變量設置為新數組。
您需要從ExtendArray
函數返回第二個數組:
public static String[] ExtendArray(String[] stringArray) {
String[] secondArray = new String[stringArray.length * 2];
// Copy first array into second array
for (int i = 0; i <= stringArray.length; i++) {
stringArray[i] = secondArray[i];
}
return secondArray;
}
並在您的主要:
randomString = ExtendArray(randomString);
您的while條件也應為:
while (index < randomString.length)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.