2010-11-20 6 views
0

Also ich erstelle eine Klasse für "MiniString", die nur voll von Instanzmethoden für das Objekt MiniString ist, jeder MiniString hat eine Instanzvariable, die ein char [] ist. Beim Testen meiner Methoden kann ich mit meiner substring() -Methode nicht herausfinden, wo ich falsch liege. Es gibt zwei Teilstring-Methoden, von denen eine den Parameter int und die andere zwei int-Parameter verwendet. Ich bekomme den Fehler auf der einen int-Parameter-Methode. Die Substring-Methode soll einen neuen MiniString aus den Zeichen zwischen der Position im Ziel-Ministring, der durch den Parameter int angegeben ist, und dem Ende des Ziel-MiniStrings zurückgeben. Der Fehler halte ich in meinem JUnit Tester bekommen ist folgende:ArrayIndexOutofBoundsException Fehler, aber weiß nicht warum

java.lang.ArrayOutofBoundsException:22 
at MiniString.substring(MiniString.java:141) 
at MiniString.substring(MiniString.java:159) 

Hier sind meine Konstrukteure für das Objekt 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++; 
    } 
} 

und hier ist der Code für die beiden Teilketten() Methoden:

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; 
} 

Danke für Ihre Hilfe!

+1

Verwenden Sie die Informationen die Ausnahme, dir gibt. Auf welche Linie weist die Ausnahme hin, d. H. Welche Linie ist die Linie 22? Welcher Arrayzugriff wird dort versucht? Setzen Sie jetzt einen Haltepunkt oder fügen Sie direkt vor dieser Zeile eine Druckmarke ein, um Ihnen den zu verwendenden Index und die Array-Länge des Arrays, auf das Sie zugreifen, anzuzeigen. Wenn Sie es immer noch nicht herausfinden können, dann geben Sie diese Information in Ihrer Frage an ("... Ich habe Zeile 22 markiert, wo es heißt: // Zeile 22 - Ausnahme löst hier aus." Ich fügte ein println hinzu und es zeigte, dass der Index ist XXX und die Array-Länge ist XXX. Ich verstehe nicht warum ... " –

Antwort

5

In Ihrem ersten substring Methode, die Linie

range.miniscule[i] = this.miniscule[i]; 

ist die wahrscheinlichste Verdächtige. Ich erwarte, dass Sie wirklich

wollen
range.miniscule[i - start] = this.miniscule[i]; 

String Teilzeichenfolge Methoden hat, die ungefähr zu tun, was Sie tun hier, aber ich nehme an, Sie tun dies zu lernen, anstatt String für einen produktiven Einsatz Handhabung neu zu erfinden.

Wenn Sie Java 6 verwenden, möchten Sie vielleicht auch die Arrays.copyOfRange(T[] ts, int i, int i1)-Methode sehen, die die meiste Arbeit erledigt, die Sie in Ihren substring-Methoden machen.

+0

ja !! das war der Fehler, vielen Dank! – deedex11

+0

Ich bin froh, dass Sie helfen. Jetzt, wie Sie scheinen, hier neu zu sein, klicken Sie auf das Kontrollkästchen um es als eine akzeptierte Antwort zu markieren, und ich werde noch glücklicher sein! –

0

Don bereits darauf hingewiesen, wo Ihr Problem liegt, sind hier einige weitere Gedanken für Sie

Beispiel für Zeichenfolge "Hallo"

  • Ok: start = 0, end = 5 => i = 0 , range.length = 5 und range.miniscule [i] ist innerhalb des Bereichs
  • Err: start = -1, Ende = 0 => i = -1, range.length = 1, aber range.miniscule [i] ist out des Bereichs für -1
  • Err: Start = 4, Ende = 5 => i = 4, range.length = 1 aber range.miniscule [i ] Liegt außerhalb des Bereichs
  • Err: start = 0, end = 7 => i = 0, würde für this.miniscule [i] versagen 5 und 6
+0

Ja, ich habe diese Ausnahmen noch nicht behandelt, aber ich arbeite an ihnen! – deedex11

Verwandte Themen