2010-11-20 173 views
0

所以我创建了一个“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; 
} 

感谢您的帮助!

+1

使用例外是给你的信息。哪一行是指向的异常,即哪一行是第22行?在那里试图访问哪个阵列?现在在该行之前设置一个断点或添加一个println,以向您显示您要使用的索引以及您正在访问的数组的array.length。如果你仍然无法弄清楚,那么在你的问题中提供这些信息(“...我在第22行标注了'// 22行 - 异常在这里抛出'。我添加了一个println,它显示索引是XXX,数组长度是XXX,我不明白为什么......“ – 2010-11-20 20:11:17

回答

5

在你的第一个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方法中的大部分工作。

+0

是的!!这是错误,非常感谢! – deedex11 2010-11-20 20:45:43

+0

乐意提供帮助现在,您似乎在这里是新的,点击复选框将其标记为已接受的答案,我会更加快乐! – 2010-11-20 20:55:59

0

唐已经指出您的问题所在,这里有对夫妇更多的心思你

举例字符串 “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
+0

是的,我还没有处理这些例外,但即时通讯工作在他们身上! – deedex11 2010-11-20 21:45:07

相关问题