ArrayIndexOutofBoundsException错误,但不知道为什么
所以我创建了一个“MiniString”类,它只是充满了对象MiniString的实例方法,每个MiniString都有一个实例变量,它是一个char []。在测试我的方法时,我找不到我的substring()方法出错的地方。有两个substring方法,其中一个接受int参数,另一个接受两个int参数。我不断收到一个int参数方法的错误。 substring方法应该返回由int参数指定的目标Ministring中的位置与目标MiniString的结尾之间的字符组成的新MiniString。我不断收到在我的JUnit测试的错误是:ArrayIndexOutofBoundsException错误,但不知道为什么
java.lang.ArrayOutofBoundsException:22
at MiniString.substring(MiniString.java:141)
at MiniString.substring(MiniString.java:159)
这里是我的对象MiniString构造函数:
private char[] miniscule;
MiniString(char[] array){
int i = 0;
miniscule = new char[array.length];
while (i < array.length){
miniscule[i] = array[i];
i++;
}
}
MiniString(String string){
int i = 0;
miniscule = new char[string.length()];
while (i < string.length()){
this.miniscule[i] = string.charAt(i);
i++;
}
}
,并在这里对两个子代码()方法:
public MiniString substring(int start, int end){
int i = start;
if (end > start){
char[] temp = new char[end - start];
MiniString range = new MiniString(temp);
while (i < end){
range.miniscule[i] = this.miniscule[i];
i++;
}
return range;
}
else{
char[] temp = new char[1];
MiniString range = new MiniString(temp);
range.miniscule[0] = 0;
return range;
}
}
public MiniString substring(int position){
int start = position;
int end = this.miniscule.length;
char[] temp = new char[end - start];
MiniString output = new MiniString(temp);
output = substring(start, end);
return output;
}
感谢您的帮助!
在你的第一个substring
方法,行
range.miniscule[i] = this.miniscule[i];
是最有可能的嫌疑人。我希望你真的想
range.miniscule[i - start] = this.miniscule[i];
String
有子的方法去做你在做什么左右在这里,但我相信你这样做是为了学习,而不是重新字符串处理的生产使用。
如果您使用的是Java 6,您可能还想看看Arrays.copyOfRange(T[] ts, int i, int i1)
方法,该方法执行substring
方法中的大部分工作。
是的!!这是错误,非常感谢! – deedex11 2010-11-20 20:45:43
乐意提供帮助现在,您似乎在这里是新的,点击复选框将其标记为已接受的答案,我会更加快乐! – 2010-11-20 20:55:59
唐已经指出您的问题所在,这里有对夫妇更多的心思你
举例字符串 “hello”
- 确定:启动= 0,结束= 5 => I = 0 ,range.length = 5,range.miniscule [i]在范围内
- Err:start = -1,end = 0 => i = -1,range.length = 1但range.miniscule [i]范围为-1
- Err:start = 4,end = 5 => i = 4, range.length = 1但range.miniscule [i ]超出范围
- 错误:开始= 0,结束= 7 => I = 0,this.miniscule [Ⅰ]将失败5和6
是的,我还没有处理这些例外,但即时通讯工作在他们身上! – deedex11 2010-11-20 21:45:07
使用例外是给你的信息。哪一行是指向的异常,即哪一行是第22行?在那里试图访问哪个阵列?现在在该行之前设置一个断点或添加一个println,以向您显示您要使用的索引以及您正在访问的数组的array.length。如果你仍然无法弄清楚,那么在你的问题中提供这些信息(“...我在第22行标注了'// 22行 - 异常在这里抛出'。我添加了一个println,它显示索引是XXX,数组长度是XXX,我不明白为什么......“ – 2010-11-20 20:11:17