我正在编写一个非常简单的程序,当用户达到当前数组的限制时会自动扩展数组。
问题是当我运行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]);
}
}
答案 0 :(得分:2)
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是一个临时数组,用于提升边界。
答案 1 :(得分:1)
你的PrintArray方法无法得到错误,你之前就会收到错误!
randomString[index] = input;
因为如果你这样做
index <= randomString.length
最后一次迭代超出范围,长度为10的字符串的值为0-9。您必须将while循环更改为
index < randomString.length
你的ExtendArray方法也不起作用!
答案 2 :(得分:0)
您应该将randomString
数组替换为具有双倍长度的新数组。您创建一个新数组并将旧数组的内容复制到新数组,但不要对新数组执行任何操作。
我想你希望ExtendArray
方法返回新数组,并将randomString
变量设置为新数组。
答案 3 :(得分:0)
您需要从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 (index < randomString.length)