Javabat子串计数

时间:2009-04-20 02:09:30

标签: java substring

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。

5 个答案:

答案 0 :(得分:6)

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

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

&安培;&安培;意思是。 ||意思是。

然而,另一个问题是你的代码看起来像是在随意试图让它工作。每个人在他们的第一个编程课程中都会在某种程度上这样做,但这是一个坏习惯。尝试在编写任何代码之前想出如何解决问题的清晰心理图,然后编写代码,然后验证代码是否实际执行了您认为应该执行的操作以及初始解决方案是否正确。

编辑:我已经说过,你已经说明了你的功能应该做什么。您解决问题的方法不正确,因此您需要重新思考如何解决问题,而不是实施。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我的代码执行此操作:

public boolean catDog(String str) {

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

        return true;
    }
    return false;
}

希望这会对你有所帮助

编辑:很抱歉,此代码无效,因为您的字符串中可以并排显示2个令牌。最好使用countMatches Apache commons库中的StringUtils

答案 4 :(得分:-1)

String sub = str.substring(i, i+1);

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

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