簡體   English   中英

我的PrintList函數的ArrayIndexOutOfBoundsException我不知道為什么

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM