2016-03-24 12 views
1
public Object countOccurrences(String string) 
{ 
    int e = 0; 
    int i = 0; 
    while (i < sentence.length()) 
    { 
     if(sentence.contains(string)) 
     { 
      e++; 
      i++; 
      return e; 
     } 
     else 
     { 
      break; 
     } 
    } 
    return e; 
} 

私のテストで合格できないコードは何ですか?とにかく、これを行うためにループ内で部分文字列メソッドを使用できますか?文字列に部分文字列が何回使用されているかを調べるにはどうすればよいですか?

@Test 
public void testCountOccurrences() 
{ 
    assertEquals(1, sc1.countOccurrences("ence")); 
    assertEquals(2, sc1.countOccurrences("en")); 
    assertEquals(1, sc2.countOccurrences("that")); 
    assertEquals(0, sc2.countOccurrences("This")); 

} 
+0

パターン/マッチャーを使用することをお勧めします。 例: http://stackoverflow.com/questions/7378451/java-regex-match-count –

答えて

7

は私がテストに合格することができません私のコードの何が問題になっているのですか?

何か他のことを行う前に、まず自分のコードが間違っていたかどうかを検討する必要があります。それを使ってデバッグしましたか?どのような時点で、それはあなたがそれを期待したかとは異なって振る舞いましたか?デバッガの使い方をまだ習得していない場合は、今すぐ始めましょう。次のステップについては

、このコードを見て:条件はちょうどsentencestringに、iまたはeに依存しない

if(sentence.contains(string)) 
{ 
    e++; 
    i++; 
    return e; 
} 

。だから、同じ長さ、少なくとも1であるsentenceとして、あなたは1つのまたは0あなたのコードを返しますどちらか

1より よりを返すことはできません現時点ではあなたのコードが悪いの何が - どのように用としてそれを修正して、私は String.indexOf(String, int)を見始めるだろう。つまり、最初に見つかったものを見つけて、次に が見つかったら、次のが見つかるまで、の出現を見つけます。 (次の反復に見て、だけでなく、試合があったことをチェックを開始する場所を動作するように、戻り値を使用してください。)

は、状況のカップルはの注意する:どのように多くの時間

  • "abbbc"に "bb"が含まれていますか?
  • 「abbbc」に「」が何回含まれていますか?

私はまた、その他の変更のカップルを促すだろう:

  • あなたの方法はObjectの戻り値の型を持っている - なぜ?確かに常に整数を返すので、返される型はintです。
  • これはパラメータ化されたテストの候補です。 1つのテストを複数のテストケースに効率的に分けることができます。複数のテストケースに分けることができます。テストケースの多くはソースオーバーヘッドなしで独立してテストできます。(ヒント:各テストケースには文章、探している、との一致数の期待値。)
0
public Object countOccurrences(String string) { 
    int e = 0; 
    int i = 0; 
    while (i <= (sentence.length() - string.length() + 1)) { 
     if (sentence.substr(i, string.length() - 1).equals(string)) { 
      e++; 
     } 


     i++; 
    } 
    return e; 
} 

私はそれを自分自身を試してみましませんでしたが、それは動作するはずです。

関連する問題