1
public static void main(String[] args)
    {
        String s = "Hello There";
        String p = "eo";
        int reps = 0;

        for (int i=0; i<s.length()-p.length(); i++) //checks all characters in the length of s.length minus the length it's searching for
        {

            for (int j=0; j<p.length(); j++)
            {
                if (s.charAt(i+j) == p.charAt(j)) 
                    reps++; 
            }


        }

        System.out.print(reps);

    }

e と o が表示される回数が 3 であるのに、4 が表示されるはずです。これは、「re」をチェックした後に検索を終了しているためだと考えました。つまり、「e」に対して「r」をチェックしたことになります。 「o」の場合は「e」。これは通常は機能しますが、検索はここで終了し、修正しようとすると範囲外エラーが発生します。

4

3 に答える 3

0

変えることから始める

for (int i=0; i<s.length()-p.length(); i++)

for (int i = 0; i < s.length(); i++)

基本的に、あなたの条件はi < 10 - 2あなたがやりたいことではないと言っていることです。代わりに、すべての文字をチェックインする必要がありますs

次は着替え…

if (s.charAt(i+j) == p.charAt(j)) 

if (s.charAt(i) == p.charAt(j)) {

そうしないと、正しい文字をチェックできず、配列の範囲外の例外が発生する可能性があります...

i==の場合、ループは( ) と( )0の文字をチェックしますが、これは実際には必要なものではありません。の文字のみを比較したいi0i+j1i

于 2013-10-01T01:08:45.733 に答える
0

これは正しいループです。

for (int i = 0; i < s.length(); i++)
{
    for (int j = 0; j < p.length(); j++)
    {
        if (s.charAt(i) == p.charAt(j)) {
            reps++; 
        }
    }
}

をチェックする必要があるときにチェックしていたため、範囲外のエラーが発生していました。s.charAt(i+j)s.charAt(i)

于 2013-10-01T01:10:32.467 に答える
0

最初の文字列全体をループしていません。

for (int i=0; i<s.length()-p.length(); i++)

する必要があります

for (int i=0; i<s.length(); i++)

..

String s = "Hello There";  //length is 11
String p = "eo"; // length is 2

最初の文字列のすべての文字をループしても問題ありませんが、s.length-p.length をループしている場合は、最初の 11-2 文字を読み取っています (そして、検索結果の 1 つは位置の長さの最後の文字です)。 -1)

if (s.charAt(i+j) == p.charAt(j)) 

そうあるべき

if (s.charAt(i) == p.charAt(j)) 

s の p のすべての文字を比較したい

"H" と "eo" を比較する場合、"H" を "e" と比較してから "o" と比較したい場合、i+j を使用すると "H" のポインターが "e" に移動し、すぐ。

于 2013-10-01T01:07:19.420 に答える