-2

我试图找出一个字符串出现在另一个字符串中的次数。对于我的测试,我对 wordOne 使用“ea”,对 wordTwo 使用“Ilikedthebestontheeastbeachleast”。我的输出为我的“外观”变量返回 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

这里有两个错误。

一个是你已经写appearances = appearances++;了而不是仅仅appearances++;. 这样做的效果appearances是递增,然后重置为之前的值;换句话说,没有变化。

第二个错误是您在第一次之后开始每次搜索,在找到匹配项的位置。所以你只是一遍又一遍地找到相同的匹配。因此,您的输出将取决于您在变为负数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

我想这可能是你的问题。行“外观=外观++;” 在您的情况下,会将外观设置为 0。这是因为 ++ 运算符会增加变量但返回原始数字。您只想输入“外观++;”。

即它需要外观(即 0)向它添加 1(使其值为 1)然后返回 0。所以基本上该语句等同于“外观 = 0;”。

于 2013-10-16T04:30:58.033 回答