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