Java ArrayIndexOutofBoundsPrintList函数的异常,我不知道为什么

Java ArrayIndexOutofBoundsPrintList函数的异常,我不知道为什么,java,arrays,exception,for-loop,printing,Java,Arrays,Exception,For Loop,Printing,我正在编写一个非常简单的程序,当用户达到当前数组的限制时,它会自动扩展数组 问题是,当我运行PrintList方法时,我得到了java.lang.ArrayIndexOutOfBoundsException,我真的不知道为什么。如果我使用一个比数组大的随机数,例如500,它工作得很好,但是如果我使用 for (int i = 0; i < stringArray.length; i++) 或 我有一个严重的例外。我如何处理这个问题,为什么我一开始就得到了它 非常感谢你的帮助 以下

我正在编写一个非常简单的程序,当用户达到当前数组的限制时,它会自动扩展数组

问题是,当我运行PrintList方法时,我得到了java.lang.ArrayIndexOutOfBoundsException,我真的不知道为什么。如果我使用一个比数组大的随机数,例如500,它工作得很好,但是如果我使用

    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]);
    }
}

您应该将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;
}
此外,您的while状态应为:

while (index < randomString.length)

Java在您尝试使用的方法中不起作用。Java中的所有内容都是按值传递的,除非它是对象中的数据点。您试图采用的是传递引用,这在Java中是不可能的

您试图做的是一个已经存在的数据结构,称为向量:

我建议这样做:不确定它是否能正常工作,因为我当前的电脑没有开发工具:

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;
}
关于向量,这是它在向量类中的工作方式:

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方法不起作用

它应该是secondArray[i]=stringArray[i];你真棒!非常感谢你,先生!请注意:Java方法名称应该是小写的。谢谢汤加,我不知道。我首先学习了C语言,除了方法外,其他所有的语言都是小写的。我怎样才能使它起作用呢?
randomString[index] = input;
index <= randomString.length
index < randomString.length