1
public boolean catDog(String str)
{
   int count = 0;

   for (int i = 0; i < str.length(); i++)
   {
      String sub = str.substring(i, i+1);

      if (sub.equals("cat") && sub.equals("dog"))
         count++;
   }

   return count == 0;
}

有我的 catDog 代码,已经研究了一段时间,但无法找出问题所在。帮助将不胜感激!*/

编辑- 如果字符串“cat”和“dog”在给定字符串中出现的次数相同,我想返回 true。

4

5 回答 5

6

一个问题是这永远不会是真的:

if (sub.equals("cat") && sub.equals("dog"))

&& 表示和。|| 意味着或。

但是,另一个问题是您的代码看起来像是在随机地试图让它工作。每个人在他们的第一个编程课上都会在某种程度上这样做,但这是一个坏习惯。在编写任何代码之前,试着在脑海中想出一个如何解决问题的清晰图景,然后编写代码,然后验证代码确实做了你认为它应该做的事情,并且你的初始解决方案是正确的。

编辑:既然你已经澄清了你的功能应该做什么,我所说的就会加倍。您解决问题的方法不正确,因此您需要重新考虑如何解决问题,而不是与实施无关。

于 2009-04-20T02:14:59.910 回答
4

这是一个批评,因为我不相信为家庭作业提供代码。但是你至少尝试过哪个比大多数在这里发布作业的小丑更好。

  • 您需要两个变量,一个用于存储猫的出现,一个用于存储狗,或者一种区分差异的方法。
  • 您的子字符串没有获得足够的字符。
  • 一个字符串不可能既是猫又是狗,你需要独立检查它们并更新正确的计数。
  • 如果 catcount 等于 dogcount,则您的 return 语句应该返回 true,尽管如果您存储了猫和狗之间的差异,您的版本将起作用。

除此之外,我会使用字符串搜索而不是检查每个位置,但这可能是你的下一个任务。您选择的方法完全适合 CS101 类型的作业。

如果您解决了我上面给出的几点,那么让您的工作应该相当容易。您可能想尝试的一件事是在代码中的重要位置插入调试语句,例如:

System.out.println(
    "i = " + Integer.toString (i) +
    ", sub = ["+sub+"]" +
    ", count = " + Integer.toString(count));

紧接在for循环的右大括号之前。这对于找出您的代码做错了什么非常宝贵。

这是我的 ROT13 版本,如果您遇到太多麻烦并想要与它进行比较,但请不要在没有先使用它的情况下使用它。从长远来看,这对您没有帮助。而且,几乎可以肯定,您的教育工作者正在跟踪 StackOverflow 以检测抄袭,因此它在短期内甚至不会帮助您。

并不是我真正关心,就业池中的愚蠢编码员越多,对我来说就越好:-)

choyvp obbyrna pngQbt(Fgevat fge) {
    vag qvssrerapr = 0;
    sbe (vag v = 0; v < fge.yratgu() - 2; v++) {
        Fgevat fho = fge.fhofgevat(v, v+3);
        vs (fho.rdhnyf("png")) {
            qvssrerapr++;
        } ryfr {
            vs (fho.rdhnyf("qbt")) {
                qvssrerapr--;
            }
        }
    }
    erghea qvssrerapr == 0;
}
于 2009-04-20T03:35:07.393 回答
0

我这样做的代码:

public boolean catDog(String str) {

    if ((new StringTokenizer(str, "cat")).countTokens() ==
        (new StringTokenizer(str, "dog")).countTokens()) {

        return true;
    }
    return false;
}

希望对你有帮助

编辑:抱歉,此代码将不起作用,因为您的字符串中可以并排放置 2 个标记。最好使用StringUtils Apache commons library 中的countMatches

于 2009-04-20T07:36:24.067 回答
0

这里要注意的另一件事是,Java 内置 String 类中的子字符串在上限上是独占的。

也就是说,对于 String str = "abcdefg",str.substring(0, 2) 检索的是 "ab" 而不是 "abc"。要匹配 3 个字符,您需要获取从i 到 i+3的子字符串。

于 2009-04-20T03:39:28.787 回答
-1
String sub = str.substring(i, i+1);

上面的行只得到一个 2 个字符的子字符串,所以不是得到“cat”,而是得到“ca”,它永远不会匹配。通过将“i+1”更改为“i+2”来解决此问题。

编辑:现在您已经在评论中澄清了您的问题:您应该有两个计数器变量,一个用于计算“狗”,一个用于计算“猫”。然后最后返回 true if count_cats == count_dogs

于 2009-04-20T02:16:55.317 回答