2010-11-20 111 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

相關問題