2010-11-20 22 views
0

"MiniString"のクラスを作成しています。このクラスは、オブジェクトMiniStringのインスタンスメソッドでいっぱいです。すべてのMiniStringにはインスタンス変数char []があります。私のメソッドをテストするとき、substring()メソッドでどこが間違っているのか分かりません。 2つの部分文字列メソッドがあり、一方はintのパラメータを取り、もう一方は2つのintパラメータを取ります。 1つのintパラメータメソッドでエラーが発生し続けます。部分文字列メソッドは、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方法で

+1

例外があなたを与えている情報を使用するために[i]は失敗するだろうthis.miniscule、I = 0終了= 7 =>、= 0を開始します。例外を指している行はどれですか?つまり、22行目はどの行ですか?そこにはどのような配列アクセスが試みられていますか?今すぐブレークポイントを設定するか、その行の前にprintlnを追加して、使用しようとしているインデックスとアクセスしている配列のarray.lengthを表示してください。あなたがまだそれを把握できない場合は、あなたの質問にその情報を提供してください( "...私は22行目に22行目をマークしました。ここに例外がスローされました。"私はprintlnを追加し、 XXXと配列の長さはXXXです。なぜか分かりません... " –

答えて

5

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

ラインは、最も可能性の高い容疑者です。私はあなたが本当に

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

Stringは約あなたがここで何をやっているんサブストリングメソッドを持っていますが、私はあなたではなく、生産用に文字列処理を再発明するよりも、学ぶためにこれをやっていると推測します期待しています。

Java 6を使用している場合は、substringメソッドで実行しているほとんどの作業を行うArrays.copyOfRange(T[] ts, int i, int i1)メソッドを参照することもできます。

+0

はい、それはエラーでした、ありがとうございます! – deedex11

+0

ここで新しいと思われるので、チェックボックスをクリックしてください受け入れられた答えとしてそれをマークすると、私はさらに幸せになるでしょう! –

0

ドンは、すでにあなたの問題は

  • [OK]を、 "こんにちは" の文字列のためにあなたが

    例えばここで、ある夫婦より考えているところを指摘:= 0を起動し、終了= 5 => I = 0 、range.length = 5、range.miniscule [i]が範囲内にある

  • エラー:start = -1、end = 0 => i = -1、range.length = 1 range.miniscule [i]が出力されている-1の範囲の範囲
  • エラー:開始= 4、終了= 5 => i = 4、 range.length = 1ただしrange.miniscule [i ]
  • 範囲外のErr:5と6
+0

はい、私はまだそれらの例外を処理していませんが、彼らに取り組んでいます! – deedex11

関連する問題