-2

ある文字列が別の文字列に何回出現するかを調べようとしています。私のテストでは、単語 1 に「ea」を使用し、単語 2 に「Iliked the best on theeast beachleast」を使用しています。私の出力は、「appearance」変数に対して 0 を返しています。これは、「ea」が wordTwo に出現する回数を格納する必要があります。

関連するコードセクションは次のとおりです。

int wordTwoLength = wordTwo.length();
  System.out.println(wordTwoLength);

  while (wordTwoLength > 0)
  {
     positionCount = wordTwo.indexOf(wordOne, positionCount);
     appearances = appearances++;
     wordTwoLength = (wordTwoLength - positionCount);
  }
  System.out.println(appearances);
4

4 に答える 4

1

問題は、外観の値を設定する場所です。違いがあります

appearances = appearances++;

appearances = ++appearances;

あなたが持っているものは、外観の値を割り当ててから、「古い」外観変数を増やします。それをインクリメントしてから割り当てたいと思うでしょう。

または、単に書くこともできます

appearances++;
于 2013-10-16T04:27:24.983 に答える
1

ここには 2 つのバグがあります。

appearances = appearances++;1つは、ただの代わりに書いたことですappearances++;。これの効果は、appearancesインクリメントされた後、以前の値にリセットされることです。つまり、変化はありません。

2 番目のバグは、一致が見つかった場所で、最初の検索の後に各検索を開始していることです。そのため、同じ一致を何度も見つけているだけです。したがって、出力は、負になるpositionCount前に減算できる回数に依存します。wordTwoLength

必要に応じて、このメソッドを次のように記述します。

public int numberOfOccurrences(String toExamine, String toFind) {
    int currentPosition = 0;
    int occurrences = 0;

    for(;;) {
       int index = toExamine.indexOf(toFind, currentPosition);
       if (index == -1) {
           return occurrences;
       }
       currentPosition = index + toFind.length();
       occurrences++;
    } 
}
于 2013-10-16T04:27:30.290 に答える
1

どういう意味

 appearances = appearances++;

これにより、外観が常にゼロになります。

それはただの外観++であるべきではありませんか?

于 2013-10-16T04:28:02.313 に答える
1

これはあなたの問題かもしれないと思います。「外観 = 外観++;」という行 あなたの場合、appearances を 0 に設定します。これは、++ 演算子が変数をインクリメントするが、元の数値を返すためです。「appearances++;」を入れたいだけです。

つまり、appearances (0) に 1 を加え (値を 1 にする)、0 を返します。したがって、基本的にステートメントは「appearances = 0;」と同等です。

于 2013-10-16T04:30:58.033 に答える