Java ArrayIndexOutofBoundsPrintList函数的异常,我不知道为什么
我正在编写一个非常简单的程序,当用户达到当前数组的限制时,它会自动扩展数组 问题是,当我运行PrintList方法时,我得到了java.lang.ArrayIndexOutOfBoundsException,我真的不知道为什么。如果我使用一个比数组大的随机数,例如500,它工作得很好,但是如果我使用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++) 或 我有一个严重的例外。我如何处理这个问题,为什么我一开始就得到了它 非常感谢你的帮助 以下
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